qemu" style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);">1.安装QEMU
先在Ubuntu中安装QEMU
sudo apt-get install qemu
安装几个QEMU需要的软件包:
sudo apt-get install zlib1g-dev sudo apt-get install libglib2.0-0 sudo apt-get install libglib2.0-dev
安装完后在shell输入 qemu 按tab键如果出现自动补齐就证明成功安装
2.安装交叉编译链环境
1).先下载交叉编译链
http://www.veryarm.com/arm-none-linux-gnueabi-gcc https://launchpad.net/gcc-arm-embedded/+download
然后把对应的tar包解压到自己PC的指定目录下
2).在Ubuntu的家目录中打开 .bashrc 在最后一行添加
export PATH=$PATH:/home/linux/tools/arm-2014.05/bin //上边解压的目录
安装完后在shell输入 arm- 按tab键如果出现自动补齐就证明成功安装
输入 arm-none-linux-guneabi-gcc -v 可以查看安装的版本,表明安装成功
3.编译内核
1).下载Linux内核
https://www.kernel.org/ 下载tarball包 如:linux-3.16.51.tar.xz
2).解压内核源码
tar xvf linux-3.16.51.tar.xz make vexpress_defconfig 得到.config文件
3).修改交叉编译链
vi Makefile 修改 ARCH ?= arm 修改 CROSS_COMPILE ?= arm-none-linux-gnueabi-
或者可以在每次使用make时直接指定编译链,如:
make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm vexpress_defconfig 得到.config文件并指定编译链
修改完Makefile后编译
make menuconfig //配置内核编译 make zImage //编译生成zImage镜像文件 make dtbs //编译生成设备树镜像文件
4.制作文件系统
1).下载busybox
https://busybox.net/downloads/
2).执行make menuconfig
Busybox Settings --> Build Optiions --> Cross Compiler prefix 输入arm-none-linux-gnueabi- 也可以在Makefile文件中修改编译链
3).指定install路径
Busybox Settings --> Installation Options --> BusyBox installation prefix 输入自己指定的路径,否则使用目前默认设置 _install
4).编译
编译 make 安装 make install 其实以上的步骤可以更简单点,直接指定交叉编译链 make defconfig make CROSS_COMPILE=arm-none-linux-gnueabi- make install CROSS_COMPILE=arm-none-linux-gnueabi-
5).添加文件
在_install目录下有 bin linuxrc sbin usr 创建其他文件夹 mkdir dev etc mnt proc var tmp sys root
6).添加动态链接库文件
cp ~/toolchain/arm-2014.05/arm-none-linux-gnuabi/libc/lib * ~/busybox-1.22.1/_install
5.挂载文件系统
1).创建挂载点
mkdir -p rootfs/{dev,etc/init.d,lib} cp busybox-1.22.1/_install/* -r rootfs/ sudo mknod rootfs/dev/tty1 c 4 1
2).生成镜像
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
格式化成ext3文件系统
mkfs.ext3 a9rootfs.ext3
将文件拷贝到镜像中
sudo mkdir tmpfs sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop sudo cp -r rootfs/* tmpfs/ sudo umount tmpfs
6.运行
qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/linux/linux-3.16/arch/arm/boot/zImage -dtb /home/linux/linux-3.16/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
如果嫌麻烦可以将上边这行指令写成一个脚本,每次打开时运行脚本就行
看到控制台打印很多类似开发板启动时的打印就证明成功了
... EXT3-fs (mmcblk0): mounted filesystem with writeback data mode VFS: Mounted root (ext3 filesystem) readonly on device 179:0. Freeing unused kernel memory: 232K (805a5000 - 805df000) random: nonblocking pool is initialized can't run '/etc/init.d/rcS': No such file or directory Please press Enter to activate this console. / #
可以看到没有init进程,这些都已经是内核启动之后的了,可以再做添加
其中/home/linux/linux-3.16是你编译内核的绝对路径
如果失败看看是不是缺少某个文件
这里简单介绍下qemu命令的参数: -M vexpress-a9 模拟vexpress-a9单板,你可以使用-M ?参数来获取该qemu版本支持的所有单板 -m 512M 单板运行物理内存512M -kernel /home/linux/linux-3.16/arch/arm/boot/zImage 指定qemu单板运行内核镜像路径 -nographic 不使用图形化界面,只使用串口 -append "console=ttyAMA0" 内核启动参数,这里告诉内核vexpress单板运行,串口设备tty
本文链接:https://hqyman.cn/post/6104.html 非本站原创文章欢迎转载,原创文章需保留本站地址!