Linux嵌入式内核编译过程

时间:2021-03-22 18:46:36

在进行本实验时,请确保自己的交叉编译环境已经成功完成!!!

本篇文章使用的是厦门铂士莱科技有限公司的实验箱,也是在其给的实验指导书上进行了自己的加工。


按照指导书上写的,咱们其实没有必要写一个hello.c,因此就不再赘述,有需要的可以查看指导书,本教程直接从修改内核配置开始。

我是在root权限下使用的,所以如果/root下没有Linux4412文件夹,那么请建立一个。并且,把“嵌入式Linux试验箱资料-->OS盘内容-->linux-->source”中的kernel.tar.gz拷贝到虚拟机中,并将其解压在Linux4412中

最开始是拷贝在桌面上的

cd     /home/stand/桌面

mv    kernel.tar.gz    /root/Linux4412

tar    kernel.tar.gz

1、  清除原配置,加载默认配置文件

cd              ~/Linux4412/kernel

make        distclean

make          boxlab_4412_defconfig

(第三条指令,指导书上说的是boxlab_4412_linux_defconfig,但是我在编译的时候,显示这个指令是找不见的,咱们可以在/kernel/arch/arm/configs中查看)

 

2、  修改drivers/char目录下的Makefile,在最后加一行obj-$(CONFIG_TEST_HELLO)+=hello.o

vim   drivers/char/Makefile进入目标文件进行编辑

 

3、  修改drivers/char目录下的Kconfig,在内核menu中添加hello选项,在文件的最后一行加上以下代码

config         TEST_HELLO   

           taistate    “My test hello module”

help

           test forkbuild.

(最后一句有一个英文句点!!虽然小,但是它很重要)

 

4、  进入内核配置菜单

make ARCH=arm menuconfig

此时等待一会,它就会弹出选择界面,上下方向键移动具体选项,左右方向键移动退出、确定选择、帮助

首先找到Device Drivers,移动左右方向键,选定select,回车确定

然后找到Character devices,移动方向键,选定select,回车确定

最后找到My Test hello module,按“M”,将其设置为module编译模式

 

5、  编译内核与模块

cd      ~/Linux4412/kernel

make

make ARCH=arm modules

sudo make ARCH=arm modules_install

在每一步命令执行时,会稍微慢一点,请耐心等待

最后一步命令执行后,很有可能会出现“arm-none-linux-genuabi-gcc”未找到,这样的反馈,不要在意,这并不会影响我们的结果,只要它显示了INSTALL…就行。

 

6、  在“嵌入式Linux试验箱资料-->OS盘内容-->linux-->source”中,找到rootfs.tar.gz文件,然后拷贝入虚拟机中

将rootfs.tar.gz放在Linux4412文件夹中,并解压。最开始我是直接拷贝在桌面上的

cd      /home/stand/桌面

mv     rootfs.tar.gz    /root/Linux4412

cd      /root/Linux4412

tar     -zxvf          rootfs.tar.gz   

 

7、  将生成的hello.ko放入root

cp      /lib/modules/3.0.15/kernel/drivers/char/hello.ko           ~/Linux4412/root

 

8、  将hello.ko放进rootfs/home中,并将rootfs放入root中

mv     hello.ko    /rootfs/home

mv     -rf     rootfs       root

 

9、  在“嵌入式Linux试验箱资料-->嵌入式试验箱7.0寸—实验内容-->tools”找到linux_tools.tgz文件,并拷贝到桌面上

cd      /home/stand/桌面

mv     linux_tools.tgz          /root

tar     -xvzf          linux_tools.tgz

解压完成后会出现usr文件夹

 

10、打包文件系统root

cd      ~/Linux4412

make_ext4fs     -s –l314572800 –a root –L linux system.img  /root/rootfs

此时就生成了system.img文件,可以使用指令ls system.img –l查看它的大小

 

10、             将生成的zImage、system.img文件取出,拷贝到pc上(因为使用的是fastboot的烧写方法,所以我把两个文件拷贝到了fastboot/firmware中,关于fastboot如何使用,请查看嵌入式系统烧写实验)

zImage文件在虚拟机的此路径下:~/Linux4412/kernel/arch/arm/boot

 

至此,我们就得到了文件zImage、system.img