Firefly开源社区

12345... 11
发表新贴

Firefly Ubuntu开发入门之(1)自已编译内核

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-18 10:45:37     
本帖最后由 牛头 于 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交叉编译工具链,下载链接为:
    下载好放到指定目录~/UbuntuDev/toolchain后解压:
mkdir ~/UbuntuDev/toolchain
cd ~/UbuntuDev/toolchain
tar -xvf arm-eabi-4.6.tar.gz
    如果是android开发者,可以直接按android SDK编译的方法编译SDK里的内核,android SDK里自带交叉编译工具链等。
    三、下载Firefly Linux内核源代码
    从Firefly github仓库下载kernel源代码:
cd ~/UbuntuDev
    至此主机安装了开发包,同时内核源码和交叉编译工具链都准备完毕。可谓是万事具备,只欠编译!GO!
    四、编译内核
    进入内核源码目录:
cd ~/UbuntuDev/firefly-3.14-kernel/
    设置ARCH环境变量,告诉编译器目标平台的架构:
export ARCH=arm
    设置交叉编译器
export CROSS_COMPILE=./../toolchain/arm-eabi-4.6/bin/arm-eabi-
jcjt1.png

    载入Firefly RK3288开发板内核配置
make firefly-rk3288_defconfig
jcjt7.png

    编译zImage,zImage是可以加载执行的二进制代码:
make -j4 zImage
    正常编译结束后,会在arch/arm/boot/目录生成zImage文件:
jcjt2.png

    编译DTB文件。dtb是.dts被DTC编译后的二进制格式的Device Tree描述,可由Linux内核解析。通常在我们为电路板制作NAND、SD启动image时,会为.dtb文件单独留下一个很小的区域以存放之,之后bootloader在引导kernel的过程中,会先读取该.dtb到内存。
make firefly-rk3288.dtb
jcjt3.png

    生成kernel.img文件
cat arch/arm/boot/zImage arch/arm/boot/dts/firefly-rk3288.dtb > zImage-dtb
jcjt4.png

mkkrnlimg -a zImage-dtb kernel.img
jcjt5.png

    当然你也可以这样去编译:
make -j8 firefly-rk3288.img
    编译出来的firefly-rk3288.img文件和上述步骤编译出来的是一样的。

    请不要问题我为什么要介绍这种编译方式,因为我是活雷锋。

    编译并安装模块,先在kernel目录创建modules_install目录,用于存放编译好的内核模块。
mkdir modules_install
make INSTALL_MOD_PATH=./modules_install modules_install
jcjt6.png

    现在的kernel和modules都已经编译完成,但还不能直接烧录到开发板运行,下一篇再讲如何让编译出来的内核在开发板上运行起来。
回复

使用道具 举报

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-18 10:45:38     
本帖最后由 牛头 于 2016-9-24 17:37 编辑

有朋友说编译不通过,抱着为观众负责的态度,我又重新编译了一次,过程截图如下:
1、删除本地目录所有文件,再从官方git仓库重新检出代码
jcb1.png
2、按教程开始准备编译内核
jcb2.png
3、内核镜像顺利编译完成
jcb3.png
4、生成dtb文件,之前教程有些笔误,已经更新
jcb4.png
5、继续按教程做
jcb5.png

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

使用道具 举报

168

积分

1

威望

0

贡献

游客

积分
168
发表于 2016-9-18 15:03:44     
本帖最后由 wangdongx40423p 于 2016-9-18 15:04 编辑

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

使用道具 举报

168

积分

1

威望

0

贡献

游客

积分
168
发表于 2016-9-18 17:12:18     
uboot用的那个版本的,2.17还是2.19的
回复

使用道具 举报

338

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
338
发表于 2016-9-18 22:55:34     
本帖最后由 csersoft 于 2016-9-18 23:01 编辑

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

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

有点影响阅读体验啊

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

使用道具 举报

706

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
706
QQ
发表于 2016-9-19 10:03:55     
linux Ubuntu已经跑起来了,一切正常
回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-20 16:44:43     
tosendzImage.png

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

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

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

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-20 17:04:00     
再次执行make -j4 zImage后,提示以下错误:
zImage2.png
我是直接新装的ubuntu16.04 然后按照这个帖子一步一步做的,没做别的任何步骤,是还需要安装别的包吗?
回复

使用道具 举报

338

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
338
发表于 2016-9-20 19:32:27     
跟楼上同样的问题,也是
  LD      drivers/built-in.o

2016-09-20 19 27 22.png
之后就没有了。

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


回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-20 23:48:03     
csersoft 发表于 2016-9-20 19:32
跟楼上同样的问题,也是

之后就没有了。

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

使用道具 举报

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

本版积分规则

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