Firefly开源社区

123
发表新贴

Firefly-RK3399 Linux内核编译

148

积分

3

威望

0

贡献

技术小白

积分
148
发表于 2017-9-21 15:11:30     
本帖最后由 F_Developer_X 于 2017-9-21 15:11 编辑

一、简介
    Firefly提供的ubuntu固件中存在不少的bug,比如说设置系统时间之后,图像界面会出现严重的bug,所有的窗口都无法拖动和关闭,只能重新启动,这样就无法执行更新系统时间的操作。由于官方没有提高最新Linux内核版本的烧写固件,为了解决一些比较严重的bug,需要自行编译Linux内核进行更新,接下来就介绍一下Linux内核编译和更新的操作流程。

二、编译环境搭建

    本次Linux内核编译的主机系统是Ubuntu16.04。在进入内核编译之前,首先需要在主机系统上安装一些依赖包,否则编译过程中会出现一系列问题。使用以下命令安装依赖的包:
           sudo apt-get install build-essential lzop libncurses5-dev libssl-dev libc6:i386

    其中,如果使用的是64位的Ubuntu,必须安装libc6:i386
    接下来就可以下载firefly-rk3399的Linux内核和GCC交叉编译工具链了。可以在Ubuntu系统下使用Git工具克隆,但是速度可能会比较慢,最好是直接从Github上下载压缩文件后再在Ubuntu系统中解压,如下图所示,其中linux-kernel-firefly是Linux内核源码,prebuilts是交叉编译工具链。

   
    内核源码结构如下图:

   
    从Linux源代码中的顶层Makefile文件中可以发现,编译内核时,会使用内核源代码同一级目录中的prebuilts目录中的交叉工具编译链,所以需要确保交叉工具编译链的目录结构和名称符合该要求。



三、Linux内核编译


   在内核源码的目录下,执行make ARCH=arm64 firefly_linux_defconfig命令,使用firefly-rk3399的默认配置。


  配置好内核之后,执行make ARCH=arm64 rk3399-firefly-linux.img -j4命令开始编译内核。


  内核编译时间视电脑配置而定,当出现如下图提示,表示内核源代码已经成功完成编译。


   内核编译完成后会在内核源码目录下生成kernel.img和resource.img文件,如下图所示,这是我们更新内核所需要的镜像文件。


四、Linux内核烧录

   将编译内核后生成的kernel.img和resource.img拷贝到一个目录下,打开瑞芯微的烧写工具,仅仅勾上名字为kernel和resource的勾,并且将得到的kernel.img和resource.img选中到该烧写工具中,如下图所示,最后点击执行开始更新内核。


五、总结

   系统重新启动后,可以使用uname -a命令查看下内核信息,和内核更新前进行对比,发现,内核版本从4.4.52更新到了4.4.55,还能看到内核的具体编译时间。经过测试,发现设置时间引发图形界面卡死的问题得到了解决。






回复

使用道具 举报

42

积分

0

威望

0

贡献

游客

积分
42
发表于 2017-10-12 16:59:26     
make ARCH=arm64 rk3399-firefly-linux.img -j4中, rk3399-firefly-linux.img是什么意思?
回复

使用道具 举报

45

积分

0

威望

0

贡献

游客

积分
45
发表于 2017-11-22 15:12:41     
请问楼主,你是怎么进入到RK3399里面查看信息的。我现在编译出了Kernel.img和Rrsource.img,然后下载进板子了,但是我不知道有没有成功,想登陆到RK3399板子里查看,我不知道如何操作。根据官网上的串口工具来,识别不到串口的com口
回复

使用道具 举报

62

积分

0

威望

0

贡献

游客

积分
62
发表于 2017-11-24 15:56:00     
購買USB-TTL 線,再依WIKI圖示連接,使用終端程式連線即可看到.

ScreenHunter_203 Nov. 24 15.54.jpg
回复

使用道具 举报

870

积分

4

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
870
发表于 2017-11-25 16:14:17     
lincoln 发表于 2017-10-12 16:59
make ARCH=arm64 rk3399-firefly-linux.img -j4中, rk3399-firefly-linux.img是什么意思?

rk3399-firefly-linux指的是dts,将rk3399-firefly-linux.dts编译到resource.img中。
回复

使用道具 举报

44

积分

0

威望

0

贡献

技术小白

积分
44
发表于 2017-12-29 14:13:44     
楼主 我按照你的步骤编译,为什么会出现错误呢?
这是我存放的目录:
lbs@lbs-vm:~/buildSpace/rk3399$ ls
linux-kernel  package  prebuilts
我是在虚拟机下编译的,ubuntu16.04  64位

下面是出错

lbs@lbs-vm:~/buildSpace/rk3399/linux-kernel$ make ARCH=arm64 firefly_linux_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
lbs@lbs-vm:~/buildSpace/rk3399/linux-kernel$ make ARCH=arm64 rk3399-firefly-linux.img -j4
  File "./scripts/gcc-wrapper.py", line 63
    print "error, forbidden warning:", m.group(2)
                                    ^
SyntaxError: invalid syntax
scripts/kconfig/conf  --silentoldconfig Kconfig
  File "./scripts/gcc-wrapper.py", line 63
    print "error, forbidden warning:", m.group(2)
                                    ^
SyntaxError: invalid syntax
  HOSTCC  scripts/basic/bin2c
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/arm64/include/generated/asm/bugs.h
  WRAP    arch/arm64/include/generated/asm/bug.h
  WRAP    arch/arm64/include/generated/asm/checksum.h
  UPD     include/config/kernel.release
  WRAP    arch/arm64/include/generated/asm/cputime.h
  WRAP    arch/arm64/include/generated/asm/clkdev.h
  WRAP    arch/arm64/include/generated/asm/dma.h
  WRAP    arch/arm64/include/generated/asm/dma-contiguous.h
  WRAP    arch/arm64/include/generated/asm/current.h
  WRAP    arch/arm64/include/generated/asm/delay.h
  WRAP    arch/arm64/include/generated/asm/div64.h
  WRAP    arch/arm64/include/generated/asm/errno.h
  WRAP    arch/arm64/include/generated/asm/ftrace.h
  WRAP    arch/arm64/include/generated/asm/early_ioremap.h
  WRAP    arch/arm64/include/generated/asm/hw_irq.h
  WRAP    arch/arm64/include/generated/asm/ioctl.h
  WRAP    arch/arm64/include/generated/asm/ioctls.h
  WRAP    arch/arm64/include/generated/asm/emergency-restart.h
  WRAP    arch/arm64/include/generated/asm/ipcbuf.h
  WRAP    arch/arm64/include/generated/asm/kmap_types.h
  WRAP    arch/arm64/include/generated/asm/kvm_para.h
  WRAP    arch/arm64/include/generated/asm/local.h
  WRAP    arch/arm64/include/generated/asm/local64.h
  WRAP    arch/arm64/include/generated/asm/irq_regs.h
  WRAP    arch/arm64/include/generated/asm/mm-arch-hooks.h
  WRAP    arch/arm64/include/generated/asm/mcs_spinlock.h
  WRAP    arch/arm64/include/generated/asm/kdebug.h
  WRAP    arch/arm64/include/generated/asm/mman.h
  WRAP    arch/arm64/include/generated/asm/msi.h
  WRAP    arch/arm64/include/generated/asm/mutex.h
  WRAP    arch/arm64/include/generated/asm/pci.h
  WRAP    arch/arm64/include/generated/asm/msgbuf.h
  WRAP    arch/arm64/include/generated/asm/poll.h
  WRAP    arch/arm64/include/generated/asm/preempt.h
  WRAP    arch/arm64/include/generated/asm/pci-bridge.h
  WRAP    arch/arm64/include/generated/asm/resource.h
  WRAP    arch/arm64/include/generated/asm/rwsem.h
  WRAP    arch/arm64/include/generated/asm/sembuf.h
  WRAP    arch/arm64/include/generated/asm/serial.h
  WRAP    arch/arm64/include/generated/asm/shmbuf.h
  WRAP    arch/arm64/include/generated/asm/segment.h
  WRAP    arch/arm64/include/generated/asm/simd.h
  WRAP    arch/arm64/include/generated/asm/socket.h
  WRAP    arch/arm64/include/generated/asm/swab.h
  WRAP    arch/arm64/include/generated/asm/switch_to.h
  CHK     include/generated/utsrelease.h
  WRAP    arch/arm64/include/generated/asm/sockios.h
  WRAP    arch/arm64/include/generated/asm/sizes.h
  WRAP    arch/arm64/include/generated/asm/topology.h
  WRAP    arch/arm64/include/generated/asm/termios.h
  WRAP    arch/arm64/include/generated/asm/trace_clock.h
  WRAP    arch/arm64/include/generated/asm/termbits.h
  WRAP    arch/arm64/include/generated/asm/unaligned.h
  WRAP    arch/arm64/include/generated/asm/user.h
  UPD     include/generated/utsrelease.h
  WRAP    arch/arm64/include/generated/asm/types.h
  WRAP    arch/arm64/include/generated/asm/xor.h
  WRAP    arch/arm64/include/generated/asm/vga.h
  WRAP    arch/arm64/include/generated/uapi/asm/kvm_para.h
  HOSTCC  scripts/conmakehash
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/dtc/dtc.o
  CC      scripts/mod/empty.o
  File "./scripts/gcc-wrapper.py", line 63
    print "error, forbidden warning:", m.group(2)
                                    ^
SyntaxError: invalid syntax
scripts/Makefile.build:258: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 1
scripts/Makefile.build:403: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** 正在等待未完成的任务....
  CC      kernel/bounds.s
  HOSTCC  scripts/dtc/flattree.o
  File "./scripts/gcc-wrapper.py", line 63
    print "error, forbidden warning:", m.group(2)
                                    ^
SyntaxError: invalid syntax
  HOSTCC  scripts/dtc/fstree.o
Kbuild:44: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:1026: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2
make: *** 正在等待未完成的任务....
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  SHIPPED scripts/dtc/dtc-lexer.lex.c
  SHIPPED scripts/dtc/dtc-parser.tab.h
  SHIPPED scripts/dtc/dtc-parser.tab.c
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTLD  scripts/dtc/dtc
Makefile:573: recipe for target 'scripts' failed
make: *** [scripts] Error 2
回复

使用道具 举报

2531

积分

12

威望

22

贡献

注册会员

Rank: 8Rank: 8

积分
2531
发表于 2017-12-29 15:35:06     
lxdlbs371 发表于 2017-12-29 14:13
楼主 我按照你的步骤编译,为什么会出现错误呢?
这是我存放的目录:
lbs@lbs-vm:~/buildSpace/rk3399$ l ...

1.不要虚拟机编译;2.不要root用户编译
回复

使用道具 举报

44

积分

0

威望

0

贡献

技术小白

积分
44
发表于 2017-12-29 16:05:09     
本帖最后由 lxdlbs371 于 2017-12-29 16:07 编辑
leung先森 发表于 2017-12-29 15:35
1.不要虚拟机编译;2.不要root用户编译

我没有用root 权限, 但是 虚拟机一直都是可以编译内核的。还有 后面报错 不是文件缺失么?  大神可以尝试一下 虚拟机编译, 毕竟一台机器两个系统切换还是不真实的,更何况,我们的虚拟机是在服务器的,有保密协议。如果虚拟机都不能编译,那么很多公司岂不是没人要准备两台电脑?
回复

使用道具 举报

44

积分

0

威望

0

贡献

技术小白

积分
44
发表于 2018-1-2 14:38:51     
问题解决 这里说明一下: 不是虚拟机的问题,也不是用户权限的问题。真心希望这个坑到我这结束。
主要是 /linux-kernel/scripts 目录下gcc-wrapper.py 文件的所有print 函数有问题, 可以屏蔽,也可以加括号:比如:
print ("error, forbidden warning", m.group(2))

全部修改完之后,在编译就不会出现问题了。最后说一句, 官网技术确实让你填坑。然后再继续让你挖坑。彻底无语。。。。
回复

使用道具 举报

44

积分

0

威望

0

贡献

技术小白

积分
44
发表于 2018-1-15 13:58:30     
lxdlbs371 发表于 2018-1-2 14:38
问题解决 这里说明一下: 不是虚拟机的问题,也不是用户权限的问题。真心希望这个坑到我这结束。
主要是 / ...

也不怪技术,我查了一下是因为python版本不同的原因。2.7 的printf 语句不需要括号, 3版本都需要了
回复

使用道具 举报

返回列表
123
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表