QEMU模擬Cortex-A9,運行kernel、rootfs

宿主機:Centos7(Kernel3.10.0)

交叉編譯工具鏈:gcc-linaro-6.2.1-2016.11-i686_arm-linux-gnueabi
QEMU:2.0.0
Linux kernel:4.4.0
busybox:1.27.2

安裝交叉編譯鏈

https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/armeb-linux-gnueabi/gcc-linaro-6.2.1-2016.11-i686_armeb-linux-gnueabi.tar.xz

解壓:

tar –xvf gcc-linaro-6.2.1-2016.11-i686_armeb-linux-gnueabi.tar.xz

安裝:

mv gcc-linaro-6.2.1-2016.11-i686_armeb-linux-gnueabi /usr/local/arm-linux-gnueabi

編輯/etc/profile,添加:PATH=$PATH:/usr/local/arm-linux-gnueabi/bin

安裝qemu-system-arm

yum install –y qemu-system-arm

編譯內核

git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

cd linux && git checkout v4.4

編譯

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig

編譯成功後,arch/arm/boot目錄下生成內核鏡像文件zImage

製作根文件系統

https://busybox.net/downloads/busybox-1.27.2.tar.bz2

解壓

tar –xvf busybox-1.27.2.tar.bz2

編譯

cd busybox-1.27.2

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig

出現圖形界面,做如下配置(這一步是可選的,如果執行了就可以不用執行cp /usr/arm-linux-gnueabi/lib rootfs/這一步):

Busybox Settings --->

  Build Options --->

    [*] Build BusyBox as a static binary (no shared libs)

完成後,執行:

make CROSS_COMPILE=arm-linux-gnueabi-

完成後,執行:

make install

完成後,該目錄下生成的_install中即是基本的busybox指令。

創建bash腳本,並運行(注意這裏不能使用ext4格式,否則內核啓動後文件系統是隻讀的,原因目前不清楚):

#!/bin/bash

##

# etc: https://download.csdn.net/download/hbuxiaofei/10588736

##

rm -rf rootfs

rm -rf tmpfs

rm -rf rootfs.ext3

mkdir rootfs

mkdir -p rootfs/proc/

mkdir -p rootfs/sys/

mkdir -p rootfs/tmp/

mkdir -p rootfs/root/

mkdir -p rootfs/var/

mkdir -p rootfs/mnt/

cp busybox-1.25.1/_install/* rootfs/ -arf

cp /usr/local/arm-linux-gnueabi/lib rootfs/ -arf

cp etc rootfs/ -arf

mkdir -p rootfs/dev/

mknod rootfs/dev/tty1 c 4 1

mknod rootfs/dev/tty2 c 4 2

mknod rootfs/dev/tty3 c 4 3

mknod rootfs/dev/tty4 c 4 4

mknod rootfs/dev/console c 5 1

mknod rootfs/dev/null c 1 3

dd if=/dev/zero of=rootfs.ext3 bs=1M count=64

mkfs.ext3 rootfs.ext3

mkdir -p tmpfs

mount -t ext3 rootfs.ext3 tmpfs/ -o loop

cp -r rootfs/* tmpfs/

umount tmpfs

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章