1.序言
本篇接上一篇,给你们介绍LinuxKernel的编译和下载运行,达到的预期疗效是都下载到板子后,可以正常通过并口登陆到Linux系统里。
2.LinuxKernel编译
NUC972LinuxKernel下载地址为/OpenNuvoton/NUC970_Linux_Kernel
下载完成后,放在Ubuntu虚拟机的~/nuc972/kernel文件夹下,解压缩。
编译前还记得前两篇文章说的吧,我们先source/home/topsemic/nuc972/toolchain/environment.sh
步入到内核目录,第一步先执行makenuc972_defconfig生成.config文件,
这一步是不是很眼熟,和上一讲uboot编译是类似的。
第二步执行:makeuImagelinux运维面试题,编译内核,报错了,错误是不是和编译uboot也类似啊。
同样的我们也是要改Makefile
此次我们用vim来改一次,
提示我们不支持vim这个指令,那我们安装一下吧,人家都给提示了,输入sudoaptinstallvim
下边是安装过程
OK,安装完毕,Ubuntu系统安装个东西真是便捷啊,一条指令就搞定了。输入vimMakefile显示如下:
花花绿绿的看着不错啊,先找到设置交叉编译链的地方,具体方式如右图1、2、3步骤描述
更改方式第一篇博客介绍的你们还记得吗?先输入I,步入到插入模式linux如何下载文件,之后更改即可
之后ESC退出插入模式,最后输入:wq保存退出即可。
之后你们多使用vim吧。
更改完Makefile后,再一次makeuImage,
靠,哪些情况,又报错了,我记得之前没碰到这个错误啊。
网上查了下,说是和文件系统有关,是权限的问题,使用sudo编译就行,于是我兴奋的sudomakeuImage,咦
这个命令找不动,不应当啊,我早已source了,但是输入arm-none-Table键也能找到啊,
于是又寻求度娘,有人说Makefile路径问题,于是我再改一次linux虚拟主机,把绝对路径加上
再来一次,
此次倒是没有刚刚arm-none-linux-gnueabi-gcc找不到的问题,不过还是有一开始提示的错误:
这是如何回事?我灵机一动,里面提示没有../rootfs
于是,我cd..,回到上级目录,mkdirrootfs建了一个rootfs文件夹,再度步入到内核目录,输入sudomakeuImage
这一次看上去不太一样,似乎要成功的样子,
不过最后还是有点小问题,还是目录没有的问题,我们再回到上级目录建个文件夹image
最后再来一次sudomakeuImage
如何还有错误,我之前编译根本没有这种问题的啊,纠结了。。。
再度上网搜索,说这个命令是uboot编译下来的,由于没有找到它的缘由,我看了下我的uboot里tools目录,果然是有这个命令的,
有网友说把它复制到交叉编译链的bin目录里就行了,于是我放进去尝试,还是有问题,最后又百度,有网友说还得改个名子,上面得加上交叉编译的名子,于是加上arm-none-linux-gnueabi-,
最后再度编译,总算大功告成,不容易啊!
在image目录里的970uimage就是我们须要的文件了。
3.烧录kernel
1)具体如何烧写,上一篇早已描述过了,这儿要注意烧录地址:
2)另外上一节早已把uboot烧录进去了,这儿不再重复了
3)这儿还要再烧个env.txt
板子里有三个东西就可以了。
4.运行
1)使用debug并口联接上后,会步入如下界面
2)这时参考官方文档输入setbootcmdnboot0x7fc000x200000;bootm0x7fc0
提示如下:
这哪些情况,官方文档逗我玩呢??
后来发觉把set改为setenv就好了,写文档的人得靠点谱啊,不然真是骗人啊。
之后再输入saveenv
3)按下复位键,这时就呼呼的跑上去了
靠linux如何下载文件,又出现错误了,这个足足卡了我1个多小时明天中午。
最后也是灵光一现,定位到是前面编译内核时提示的rootfs文件夹有问题哪里,莫非我自己随意建个空的rootfs就可以吗?
另外追忆之前我用他人提供好的bsp包没出现这个问题,哪里默认是有rootfs文件目录的,于是把那儿的rootfs搞过来,解压后,再重新编译下(先sudomakeclean,再sudomakeuImage)并重新下载一次就ok了。我猜想内核里用到rootfs文件夹里的东西。原先都没有考虑过这个问题啊我。
最后成功的现象是:
可以成功登录进去,输入指令了!
至于这个rootfs文件夹里东西是如何来的,我们上篇文章再说。
5.结束语
本篇文章写出来,自己收获了好多,本以为之前调通的东西,很容易就操作下来了,没想到遇见那么多新的问题,不过遇见问题是好事,会让你思索一些原先没有注意到的地方。
顺便提下,这儿内核默认用的ramdisk根文件系统,这个文件系统是存在RAM里的,所以你在上面写入东西,一断电就没有了。这和常规在NAND上的Yaffs2文件系统不一样。下一篇介绍倘若换成NANDYaffs2文件系统。
经过这一篇的讲解,你假如实际动手实现后,应当对嵌入式Linux愈发感兴趣了吧,相当于我们会重装系统了。尽管困难重重,而且不要舍弃。
有任何问题欢迎你们留言交流讨论。
上期会给你们介绍怎么改成NANDYaffs2文件系统。
该系列往期文章见:
1.从单片机转Linux系列第1篇:开发环境搭建
2.嵌入式Linux系列第2篇:运行HelloWorld
3.嵌入式Linux系列第3篇:uboot编译下载