在进行本实验时,请确保自己的交叉编译环境已经成功完成!!!
本篇文章使用的是厦门铂士莱科技有限公司的实验箱,也是在其给的实验指导书上进行了自己的加工。
按照指导书上写的,咱们其实没有必要写一个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