牛头 发表于 2016-9-18 10:45:37

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-18 10:45:38

本帖最后由 牛头 于 2016-9-24 17:37 编辑

有朋友说编译不通过,抱着为观众负责的态度,我又重新编译了一次,过程截图如下:
1、删除本地目录所有文件,再从官方git仓库重新检出代码

2、按教程开始准备编译内核

3、内核镜像顺利编译完成

4、生成dtb文件,之前教程有些笔误,已经更新

5、继续按教程做


之前12号提交的代码出了些问题,导致编译问题。
遇到编译问题的朋友请更新到最新的内核代码,最新的代码ID为:8fc3d070b5765b55dbb93067d1ef7f7fba04dbd5

wangdongx40423p 发表于 2016-9-18 15:03:44

本帖最后由 wangdongx40423p 于 2016-9-18 15:04 编辑

加油啊,楼主,下面该怎么弄。内核现在启动不起来,starting kernel ......   就停止了。

wangdongx40423p 发表于 2016-9-18 17:12:18

uboot用的那个版本的,2.17还是2.19的

csersoft 发表于 2016-9-18 22:55:34

本帖最后由 csersoft 于 2016-9-18 23:01 编辑

咬文嚼字:自已
另外为什么每张图片下都有个

xxx.png (XX KB, 下载次数: 0)
下载附件

有点影响阅读体验啊

言归正传,感谢lz分享经验~

readsa 发表于 2016-9-20 16:44:43



为啥我编译完zImage,没有出现zImage is ready的提示,直接就结束了啊?如上图。

并且arch/arm/boot 里面也是什么都没有

前面的交叉编译,环境变量,还有编译配置都是按要求设置好的,没有发现问题。
我也用export检查过了

readsa 发表于 2016-9-20 17:04:00

再次执行make -j4 zImage后,提示以下错误:

我是直接新装的ubuntu16.04 然后按照这个帖子一步一步做的,没做别的任何步骤,是还需要安装别的包吗?

csersoft 发表于 2016-9-20 19:32:27

跟楼上同样的问题,也是LD      drivers/built-in.o

之后就没有了。

基本包安装过了。
系统环境是虚拟机 Ubuntu 16.04 x64,CPU4核,内存8G。
请问下这是什么原因造成的呢?


readsa 发表于 2016-9-20 23:48:03

csersoft 发表于 2016-9-20 19:32
跟楼上同样的问题,也是

之后就没有了。


我把Android4.4的sdk的kernel抽出来编译了一下,这次没有问题了,看来是官方给的这个内核有问题

readsa 发表于 2016-9-20 23:54:09

本帖最后由 readsa 于 2016-9-21 00:42 编辑

大哥你这也搞错了吧,

应该是
make firefly-rk3288.dtb


而且在mkdir modules_install之前少了:
make modules
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Firefly Ubuntu开发入门之(1)自已编译内核