qemu下运行kernel

1.获得linux源码并编译

1.1获得源码网络上大多推荐的方式都是

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

但是我这边的网速确实不太行,所以直接去了(kernel.org)下载自己要的源码版本,这里选择的是4.1.7
https://www.kernel.org/pub/linux/kernel/v4.x/

1.2 进入源码根目录并编译, 因为我们需要编出arm架构下的kernel,所以makefile里面的ARCH和CROSS_COMPILE都需要另外指定.这里使用的config文件为vexpress_defconfig,这是arm官方的一块开发板的型号.

cd linux-4.1.7
//在Makefile文件的开头添加
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi-
//退出
make vexpress_defconfig
make -j4 zImage dtbs modules

编出来的kernel文件放在

linux-4.1.7/arch/arm/boot/zImage.

编好的device tree 文件(后缀为dtb)放在

linux-4.1.7/arch/arm/boot/dts/vexpress-v2p-ca9.dtb 

2.获得busybox源码并编译

2.1 官方网站
https://www.busybox.net/downloads/
我这边选择的是1.25.0的版本.下载解压后进入目录

2.2 编译

make defconfig
//在Makefile下添加
ARCH=arm
CROSS_COMPILE = arm-linux-gnueabi-
//退出Makefile
make
make install

在源码根目录下会生成_install 的文件夹,里面就是板子上运行需要的命令的集合.

3.制作根文件系统

3.1在 home 目录下创建一个文件夹,作为板子根文件系统存放的目录.

cd ~
sudo mkdir rootfs
cd rootfs
sudo mkdir lib
sudo mkdir dev
sudo cp ~/busybox-1.25.0/_install/* -r ./
sudo cp /usr/arm-linux-gnueabi/lib/* ./lib/
sudo mknod dev/tty1 c 4 1
sudo mknod dev/tty2 c 4 2
sudo mknod dev/tty3 c 4 3
sudo mknod dev/tty4 c 4 4

3.2 用dd命令产生根文件系统的镜像

在 home 目录下生成一个镜像

dd if=/dev/zero of=rootfs.img bs=1M count=32
mkfs.ext4 rootfs.img

3.3 将rootfs文件夹的内容copy到 rootfs.img 中

sudo mkdir tmpfs
sudo mount -t ext4 rootfs.img tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs

4.qemu下运行

将zImage和dtb文件copy到 home 目录下,由于我是ssh到服务器运行的,所以指定 -nographic

qemu-system-arm -M vexpress-a9 -m 512M -kernel zImage -nographic -dtb vexpress-v2p-ca9.dtb -sd rootfs.img -append "root=/dev/mmcblk0 console=ttyAMA0 init=/linuxrc"

然后就成功进到console了

qemu下运行kernel_第1张图片

你可能感兴趣的:(qemu,qemu,kernel)