QEMU模拟开发板系列2——模拟启动uboot和kernel

模拟启动uboot和kernel

由于qemu模拟vexpress资料最多,所以使用vexpress-ca9开发板进行模拟。
为了方便研究uboot和kernel,所以使用版本为uboot-2013.10和linux-2.6.39。

vexpress-a9开发板

vexpress系列开发板采用了主板+子板的设计结构,主板提供各种外围接口,子板提供CPU运算
主板:

主板则提供电源,可以自定义选添加各逻辑子板以提供相关功能。

子板:
在这里插入图片描述

提供主系统CPU。

系统原理图
在这里插入图片描述
在这里插入图片描述

模拟uboot启动

mkdir qemu
cd qemu

cat > qemu_uboot.sh << EOF
#!/bin/bash

qemu-system-arm \
		-nographic \
		-M vexpress-a9 \
		-m 512M \
		-kernel u-boot-noip
EOF
	
cp uboot-2013.10/u-boot images/u-boot-noip

chmod +x qemu_uboot.sh
./qemu_uboot.sh

模拟kernel启动

创建虚拟磁盘

qemu-img create -f raw vexpress.img 100M

虚拟磁盘创建分区并修改

fdisk vexpress.img					#使用n命令创建分区,各种下一步就行,使用w命令保存退出
losetup /dev/loop0 vexpress.img		#挂载vexpress.img到/dev/loop0设备上
partx -u /dev/loop0					#使用partx命令让系统刷新系统的分区信息
mkfs.ext3 /dev/loop0p1				#制作ext3格式的文件系统

mkdir rootfs						#建立一个rootfs目录用来作为挂载目录
mount -o loop /dev/loop0p1 ./rootfs	#将生成的ext3格式的分区挂载到rootfs目录

拷贝必要文件到根文件系统

cp -raf busybox-1.22.0/_install/* rootfs/

cp -raf /opt/toolchain/arm-linux-gnueabi-4.5.1/lib rootfs/
rm rootfs/lib/*.a

arm-linux-strip rootfs/lib/*

mkdir -p rootfs/proc/
mkdir -p rootfs/sys/
mkdir -p rootfs/tmp/
mkdir -p rootfs/root/
mkdir -p rootfs/var/
mkdir -p rootfs/mnt/
mkdir -p rootfs/etc/

创建etc目录下文件

mkdir -p rootfs/etc/init.d
mkdir -p rootfs/etc/sysconfig

编辑rcS

cat > rootfs/etc/init.d/rcS << EOF
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S
prevlevel=N
umask 022

export PATH runlevel prevlevel

mount -a
mkdir -p /dev/pts

mount -t devpts devpts /dev/pts
#mount -n -t usbfs none /proc/bus/usb

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

mkdir -p /var/lock

ifconfig lo 127.0.0.1
#ifconfig eth0 10.238.233.5

/bin/hostname -F /etc/sysconfig/HOSTNAME
EOF

编辑HOSTNAME

cat > rootfs/etc/sysconfig/HOSTNAME << EOF
vexpress
EOF

编辑fstab

vi rootfs/etc/fstab

#device		mount-point	type	options		dump	fsck order
proc		/proc		proc	defaults		0	0
tmpfs		/tmp		tmpfs	defaults		0	0
sysfs		/sys		sysfs	defaults		0	0
tmpfs		/dev		tmpfs	defaults		0	0
var		/dev		tmpfs	defaults		0	0
ramfs		/dev		ramfs	defaults		0	0
debugfs		/sys/kernel/debug	debugfs		defaults	0	0

编辑inittab

cat > rootfs/etc/inittab << EOF
# /etc/inittab

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
EOF

编辑profile

cat > rootfs/etc/profile << EOF
USER="root"
LOGNAME=\$USER
export HOSTNAME=\`/bin/hostname\`
export USER=root
export HOME=/root
export PS1="[\$USER@\$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:\$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
EOF

添加权限

chmod +x rootfs/etc/init.d/rcS

创建必要节点到根文件系统

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

退出根文件系统

partx -d /dev/loop0				#如果执行失败,可以使用 umount -f rootfs
losetup -d /dev/loop0

调试运行

cat > qemu_kernel.sh << EOF
qemu-system-arm \
		-nographic \
		-M vexpress-a9 \
		-m 512M \
		-kernel zImage \
		-sd vexpress.img \
		-append "init=/linuxrc root=/dev/mmcblk0p1 rw rootwait earlyprintk console=ttyAMA0"
EOF

cp linux-2.6.39/arch/arm/boot/zImage .
chmod +x qemu_kernel.sh
./qemu_kernel.sh
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值