使用虚拟机环境 ubuntu
1、安装QEMU
Sudo apt-get install qemu
2、安装QEMU依赖包
Sudo apt-get install zliblg-dev
Sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
安装完成之后,命令行输入qemu按tab键会自动补齐则说明安装成功
3. 安装arm交叉编译器
安装gcc交叉编译器
sudo apt-get install gcc-arm-linux-gnueabi
安装g++交叉编译器
sudo apt-get install g++-arm-linux-gnueabi
4、 下载linux内核源码
https://www.kernel.org/
本次下载的内核源码版本为4.4
5、执行make menuconfig时出现错误
HOSTCC scripts/kconfig/mconf.o
In file included from scripts/kconfig/mconf.c:23:0:
scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: No such file or directory
#include CURSES_LOC
^
compilation terminated.
需要执行
sudo apt-get install libncurses5-dev
sudo apt-get install build-essential
6、配置编译环境
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make zImage
make dtbs
cp arch/arm/boot/zImage ../a9
cp arch/arm/boot/dts/*ca9.dtb ../a9
7、制作根文件系统
文件系统下载指令
wget http://www.busybox.net/downloads/busybox-1.25.0.tar.bz2 --no-check-certificate
tar -jxvf busybox-1.25.0.tar.bz2
配置编译环境
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make CROSS_COMPILE=arm-linux-gnueabi- install
制作根目录
make rootfs
make lib
make dev
cp busybox-1.25.0/_install/* -r rootfs/
cp -P /usr/arm-linux-gnueabi/lib* rootfs/lib/
mknod dev/tty1 c 4 1
mknod dev/tty2 c 4 2
mknod dev/tty3 c 4 3
mknod dev/tty4 c 4 4
生成SD卡镜像
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mount -t ext3 rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/* tmpfs/
umount tmpfs
qemu 启动命令
qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/usrdev/vexpress-a9/a9/zImage -dtb /home/usrdev/vexpress-a9/a9/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0 rw init=/linuxrc" -sd rootfs.ext3
· -M 指定开发板
· · -m 指定内存大小
· · -kernel 指定内核文件
· · -dtb 指定dtb文件
· · -nographic 指定不需要图形界面
· · -append 指定扩展显示界面,串口或者LCD
·
Image、uImage、zImage这三者的区别
image是内核映像文件,zImage是内核映像文件的压缩文件,可以在make menuconfig中选择压缩格式,uImage是uboot专用映像文件,和zImage文件相比,其在前面多出64个字节,这些字节中会对当前的内核版本,内核加载的其实地址,内核文件生成的时间,大小等一下相关的信息进行说明,地址0x40地址之后,就是zImage文件。