虚拟机:下载地址
Ubuntu :下载地址
虚拟机安装Ubuntu教程:参考文章
make 安装: sudo apt install make
vim 安装: sudo apt-get install vim
git 安装: sudo apt-get install git
ARM-Linux-GCC 交叉编译工具:
sudo apt-get install gcc-arm-linux-gnueabi
自动安装: sudo apt-get install qemu
版本查看: qemu-img -V
支持开发板查看: qemu-system-arm -M help
此次以 vexpress-a9 为例
[Linux-4.9.279下载地址]
1.解压
2.解压后,在linux-4.9.279目录下修改makefile:vi Makefile
3.按 i 修改交叉编译器配置(ARCH 和 CROSS_COMPILE),修改后的内容如下:
完成后 esc,输入 :wq保存。
4.配置对应的开发板,在linux-4.9.279目录下:make vexpress_defconfig
完成后,在linux-4.9.279目录下:ll,可以看到生成的.config文件。
5.编译zImage,在linux-4.9.279目录下:make zImage -j6
6.编译内核模块,在linux-4.9.279目录下:make modules -j4
7.编译dtbs文件,在linux-4.9.279目录下:make dtbs
linux-4.9.279目录下输入命令(注意修改路径):
qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/zhou/linux-4.9.279/arch/arm/boot/zImage -dtb /home/zhou/linux-4.9.279/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”
出现以下打印:
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
Booting Linux on physical CPU 0x0
Linux version 4.9.279 (zhou@zhou-VirtualBox) (gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) ) #1 SMP Thu Aug 12 12:27:30 CST 2021
CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c5387d
…直接跳转到结尾…
[end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]
说明内核编译成功,由于没有根文件系统,所以内核报错。
1.打开新的终端,输入命令:ps -a
2.找到 qemu-system-arm 的 PID , 并输入命令 kill 相应的PID,终端显示 qemu-system-arm: terminating on signal 15 from pid 9064 (bash),即完成关闭qemu。
1.下载busybox,并解压。版本:1.32.0
下载地址
2.修改Makefile中 CROSS_COMPILE 和 ARCH 内容。在busybox-1.32.0目录下:vi Makefile
修改后的内容如下:
CROSS_COMPILE ?= arm-linux-gnueabi-
ARCH ?= arm
3.配置busybox。在busybox-1.32.0目录下:make defconfig
4.编译: make -j4
5.安装: make install。安装成功提示:
You will probably need to make your busybox binary setuid root to ensure all configured applets will work properly.
6.回到home目录,
新建rootfs: mkdir rootfs
rootfs目录下: mkdir lib
拷贝busybox命令:sudo cp busybox-1.32.0/_install/* -r rootfs/
拷贝交叉编译器命令:sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/
rootfs目录下: mkdir dev
dev目录下:
sudo mknod -m 666 tty1 c 4 1
sudo mknod -m 666 tty2 c 4 2
sudo mknod -m 666 tty3 c 4 3
sudo mknod -m 666 tty4 c 4 4
sudo mknod -m 666 console c 5 1
sudo mknod -m 666 null c 1 3
7.制作SD卡根文件系统
1.生成SD卡镜像:home 目录下: dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
2.格式化: mkfs.ext3 rootfs.ext3
3.挂载SD卡: mount -t ext3 rootfs.ext3 /mnt/ -o loop
4.复制rootf到SD: cp -r rootfs/* /mnt
5.卸载SD: umount /mnt
qemu-system-arm
-M vexpress-a9
-m 512M
-kernel /home/zhou/linux-4.9.279/arch/arm/boot/zImage
-dtb /home/zhou/linux-4.9.279/arch/arm/boot/dts/vexpress-v2p-ca9.dtb
-nographic
-append “root=/dev/mmcblk0 rw console=ttyAMA0”
-sd /home/zhou/rootfs.ext3
打印以下内容即为成功
Please press Enter to activate this console.