Firefly Ubuntu开发入门之(1)自已编译内核
本帖最后由 牛头 于 2016-9-24 17:34 编辑很多朋友希望在拿到Firelfy发布的Ubuntu镜像后,会想自己加驱动或自己编译的内核等等,但做的过程中难免出现各种各样的问题。网上各种教程都不那么切题,讲解都不是那么细致,让人感到迷茫,又或许是无助。Firefly团队努力地在帮助开发者打破此困局,整理策划了系列教程,让开发者可以通过Firefly开源平台可以快速上手开发,并快速打造出成熟产品。 “创新 开源 分享 定制”是我们的口号,我们一直在努力。
那么请跟着我的脚步上路吧! 一、Linux主机安装内核开发包 Linux内核编译需要主机安装一些开发包,具体的开发工具有那些可以通过包名自行补脑。安装过程中需要留意开发包是否都有安装成功,若有开发包安装失败可以单独再重新安装。sudo apt-get install build-essential lzop libncurses5-dev libssl-dev 如果使用的是 64 位的 Ubuntu,还需要安装:sudo apt-get install libc6:i386
二、安装交叉编译工具链 纯Linux开发的朋友可以通过Github单独下载交叉编译工具链,内核编译用到arm-eabi-4.6交叉编译工具链,下载链接为:http://pan.baidu.com/s/1sl7v1EX 下载好放到指定目录~/UbuntuDev/toolchain后解压:mkdir ~/UbuntuDev/toolchaincd ~/UbuntuDev/toolchaintar -xvf arm-eabi-4.6.tar.gz 如果是android开发者,可以直接按android SDK编译的方法编译SDK里的内核,android SDK里自带交叉编译工具链等。 三、下载Firefly Linux内核源代码 从Firefly github仓库下载kernel源代码:cd ~/UbuntuDevgit clone https://github.com/T-Firefly/firefly-3.14-kernel 至此主机安装了开发包,同时内核源码和交叉编译工具链都准备完毕。可谓是万事具备,只欠编译!GO! 四、编译内核 进入内核源码目录:cd ~/UbuntuDev/firefly-3.14-kernel/ 设置ARCH环境变量,告诉编译器目标平台的架构:export ARCH=arm 设置交叉编译器:export CROSS_COMPILE=./../toolchain/arm-eabi-4.6/bin/arm-eabi-
载入Firefly RK3288开发板内核配置:make firefly-rk3288_defconfig
编译zImage,zImage是可以加载执行的二进制代码:make -j4 zImage 正常编译结束后,会在arch/arm/boot/目录生成zImage文件:
编译DTB文件。dtb是.dts被DTC编译后的二进制格式的Device Tree描述,可由Linux内核解析。通常在我们为电路板制作NAND、SD启动image时,会为.dtb文件单独留下一个很小的区域以存放之,之后bootloader在引导kernel的过程中,会先读取该.dtb到内存。make firefly-rk3288.dtb
生成kernel.img文件cat arch/arm/boot/zImage arch/arm/boot/dts/firefly-rk3288.dtb > zImage-dtb
mkkrnlimg -a zImage-dtb kernel.img
当然你也可以这样去编译:make -j8 firefly-rk3288.img 编译出来的firefly-rk3288.img文件和上述步骤编译出来的是一样的。
请不要问题我为什么要介绍这种编译方式,因为我是活雷锋。
编译并安装模块,先在kernel目录创建modules_install目录,用于存放编译好的内核模块。mkdir modules_installmake INSTALL_MOD_PATH=./modules_install modules_install
现在的kernel和modules都已经编译完成,但还不能直接烧录到开发板运行,下一篇再讲如何让编译出来的内核在开发板上运行起来。 本帖最后由 牛头 于 2016-9-24 17:37 编辑
有朋友说编译不通过,抱着为观众负责的态度,我又重新编译了一次,过程截图如下:
1、删除本地目录所有文件,再从官方git仓库重新检出代码
2、按教程开始准备编译内核
3、内核镜像顺利编译完成
4、生成dtb文件,之前教程有些笔误,已经更新
5、继续按教程做
之前12号提交的代码出了些问题,导致编译问题。
遇到编译问题的朋友请更新到最新的内核代码,最新的代码ID为:8fc3d070b5765b55dbb93067d1ef7f7fba04dbd5 本帖最后由 wangdongx40423p 于 2016-9-18 15:04 编辑
加油啊,楼主,下面该怎么弄。内核现在启动不起来,starting kernel ...... 就停止了。 uboot用的那个版本的,2.17还是2.19的 本帖最后由 csersoft 于 2016-9-18 23:01 编辑
咬文嚼字:自已
另外为什么每张图片下都有个
xxx.png (XX KB, 下载次数: 0)
下载附件
有点影响阅读体验啊
言归正传,感谢lz分享经验~
为啥我编译完zImage,没有出现zImage is ready的提示,直接就结束了啊?如上图。
并且arch/arm/boot 里面也是什么都没有
前面的交叉编译,环境变量,还有编译配置都是按要求设置好的,没有发现问题。
我也用export检查过了 再次执行make -j4 zImage后,提示以下错误:
我是直接新装的ubuntu16.04 然后按照这个帖子一步一步做的,没做别的任何步骤,是还需要安装别的包吗? 跟楼上同样的问题,也是LD drivers/built-in.o
之后就没有了。
基本包安装过了。
系统环境是虚拟机 Ubuntu 16.04 x64,CPU4核,内存8G。
请问下这是什么原因造成的呢?
csersoft 发表于 2016-9-20 19:32
跟楼上同样的问题,也是
之后就没有了。
我把Android4.4的sdk的kernel抽出来编译了一下,这次没有问题了,看来是官方给的这个内核有问题 本帖最后由 readsa 于 2016-9-21 00:42 编辑
大哥你这也搞错了吧,
应该是
make firefly-rk3288.dtb
而且在mkdir modules_install之前少了:
make modules