Firefly开源社区

标题: Firefly-RK3399 Linux内核编译 [打印本页]

作者: F_Developer_X    时间: 2017-9-21 15:11
标题: Firefly-RK3399 Linux内核编译
本帖最后由 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,还能看到内核的具体编译时间。经过测试,发现设置时间引发图形界面卡死的问题得到了解决。







作者: lincoln    时间: 2017-10-12 16:59
make ARCH=arm64 rk3399-firefly-linux.img -j4中, rk3399-firefly-linux.img是什么意思?
作者: heart_heart    时间: 2017-11-22 15:12
请问楼主,你是怎么进入到RK3399里面查看信息的。我现在编译出了Kernel.img和Rrsource.img,然后下载进板子了,但是我不知道有没有成功,想登陆到RK3399板子里查看,我不知道如何操作。根据官网上的串口工具来,识别不到串口的com口
作者: scz1214    时间: 2017-11-24 15:56
購買USB-TTL 線,再依WIKI圖示連接,使用終端程式連線即可看到.

ScreenHunter_203 Nov. 24 15.54.jpg (9.94 KB, 下载次数: 416)

ScreenHunter_203 Nov. 24 15.54.jpg

作者: Livvol    时间: 2017-11-25 16:14
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中。
作者: lxdlbs371    时间: 2017-12-29 14:13
楼主 我按照你的步骤编译,为什么会出现错误呢?
这是我存放的目录:
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

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

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

我没有用root 权限, 但是 虚拟机一直都是可以编译内核的。还有 后面报错 不是文件缺失么?  大神可以尝试一下 虚拟机编译, 毕竟一台机器两个系统切换还是不真实的,更何况,我们的虚拟机是在服务器的,有保密协议。如果虚拟机都不能编译,那么很多公司岂不是没人要准备两台电脑?
作者: lxdlbs371    时间: 2018-1-2 14:38
问题解决 这里说明一下: 不是虚拟机的问题,也不是用户权限的问题。真心希望这个坑到我这结束。
主要是 /linux-kernel/scripts 目录下gcc-wrapper.py 文件的所有print 函数有问题, 可以屏蔽,也可以加括号:比如:
print ("error, forbidden warning", m.group(2))

全部修改完之后,在编译就不会出现问题了。最后说一句, 官网技术确实让你填坑。然后再继续让你挖坑。彻底无语。。。。
作者: lxdlbs371    时间: 2018-1-15 13:58
lxdlbs371 发表于 2018-1-2 14:38
问题解决 这里说明一下: 不是虚拟机的问题,也不是用户权限的问题。真心希望这个坑到我这结束。
主要是 / ...

也不怪技术,我查了一下是因为python版本不同的原因。2.7 的printf 语句不需要括号, 3版本都需要了
作者: maja_001    时间: 2018-1-23 15:49
多谢分享
作者: 我们都是天才    时间: 2018-11-1 17:27
正好需要~~
作者: 我们都是天才    时间: 2018-11-1 17:39
!!!!水经验!!!!!!!
作者: RK3399er    时间: 2018-11-15 02:32
谢谢楼主分享
作者: s1387473    时间: 2019-1-16 09:46
编译过SDK包中的kernel吗?
作者: bug_fly    时间: 2019-3-8 11:34
水一点经验,顺便Mark一下
作者: jidan    时间: 2019-3-12 19:35

作者: rk3399初学者    时间: 2019-4-22 22:06
谢谢 分享
作者: lite    时间: 2019-6-4 19:16
学习,谢谢
作者: hutzeng    时间: 2019-6-7 09:52
多谢分享

作者: dect    时间: 2019-6-14 13:53
123
作者: gcc123    时间: 2019-7-4 11:01
想问一下,内核版本能够回刷到2.7版本吗

作者: wwwbbk1    时间: 2019-7-27 08:21
请问怎么把1500000波特率改115200?把arch/arm64/boot/dts/rockchip/目录下所有于3399相关的rockchip.baudrate都改115200了还是不起作用
作者: ajaxchan    时间: 2019-10-31 09:09
谢谢分享!
作者: snowywind    时间: 2020-1-6 16:54
感谢楼主分享
作者: Jandy    时间: 2020-1-27 14:52
感谢
作者: 宇智波流浪    时间: 2020-10-22 13:53
我也把kernel和resources烧进去了,但是启动不起来系统呢
作者: little-pp    时间: 2020-12-16 11:10
请我楼主,我烧写的系统里面为什么没有linux-kernel-firefly这个文件呢,我用的是firefly rk3399的板子
作者: little-pp    时间: 2020-12-17 14:38
宇智波流浪 发表于 2020-10-22 13:53
我也把kernel和resources烧进去了,但是启动不起来系统呢

你问题解决了吗?我也是这个问题,请教一下
作者: 宇智波流浪    时间: 2020-12-30 14:43
little-pp 发表于 2020-12-17 14:38
你问题解决了吗?我也是这个问题,请教一下

我发现这个板子不支持单独烧录kernel和resource了。 直接烧录boot.img ,把分区地址写对就行
作者: 18689257480    时间: 2021-1-17 17:16
准备入坑
作者: 艾佛森    时间: 2021-1-18 17:38
1111
作者: abey4315266    时间: 2021-1-25 11:26
学习一下
作者: dgx_lsyd3    时间: 2021-1-27 09:52
谢谢分享经验。
作者: nash870504    时间: 2021-2-25 12:34
刚开始学习,谢谢楼主
作者: real    时间: 2021-9-30 09:54
little-pp 发表于 2020-12-16 11:10
请我楼主,我烧写的系统里面为什么没有linux-kernel-firefly这个文件呢,我用的是firefly rk3399的板子

我也是诶,找不到这个文件,请问你解决了吗

作者: chaojidaotuguai    时间: 2021-11-18 15:18
感谢分享
作者: 张飞龙    时间: 2021-11-18 19:26
宇智波流浪 发表于 2020-12-30 14:43
我发现这个板子不支持单独烧录kernel和resource了。 直接烧录boot.img ,把分区地址写对就行

分区地址怎么设置?
作者: Gop    时间: 2021-12-2 17:45
谢谢,很有帮助
作者: helloxue    时间: 2021-12-9 17:08

感谢分享
作者: plla    时间: 2021-12-10 16:05
来看看学习学习
作者: goregechang    时间: 2022-5-1 17:46
学习
作者: goregechang    时间: 2022-5-1 19:48
谢谢分享!!!
作者: ac-shenzhen    时间: 2022-6-27 20:13
谢谢分享




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1