qemu 模拟启动uboot/kernel

一,qemu 源码编译及安装:

1,首先当然是下载解压源码
里面有一个文件configure要有可执行权限

2,然后启动容器

sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev libsdl1.2-dev
cd 源码所在目录
./configure
make
make install

这里注意,如果你觉得编译的太慢了,可以在make加 -j x参数,其中x=你的手机处理器核心数
警告提示你用sdl2.0不要管,亲测用sdl2.0鼠标会用不了.


二,uboot
1,针对ARM平台进行编译,使其适合用于ARM处理器,配置U-boot用于特定的板子(此处versatilepb),执行如下命令:

make ARCH=arm  CROSS_COMPILE=arm-linux-gnueabi-  vexpress_ca9x4_defconfig
make ARCH=arm  CROSS_COMPILE=arm-linux-gnueabi- -j4
//make ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf- -j4

2,在Qemu中运行U-Boot,命令为:

qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic -m 512M
sudo qemu-system-arm -M vexpress-a9 -m 512 -kernel u-boot -nographic -net nic,macaddr=00:16:3e:00:00:01 -net tap

最新指令(nfs/tftp均可用):
sudo qemu-system-arm -M vexpress-a9 -m 512 -nographic -net nic -net tap,ifname=tap0,script=no -sd sdcard.ext3 -kernel u-boot

setenv ipaddr 192.168.0.2; setenv netmask 255.255.255.0; setenv serverip 192.168.0.1;setenv bootargs "console=ttyAMA0 root=/dev/mmcblk0 init=/linuxrc rw rootwait";tftp 0x60003000 uImage; tftp 0x70003000 dtb; fdt addr 0x70003000; bootm 0x60003000 - 0x70003000

set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.1:/home/gjh/learning/vexpress/nfs/nfsroot ip=192.168.0.2:192.168.0.1:192.168.0.255:255.255.255.0::eth0:off init=/linuxrc rw rootwait console=ttyAMA0

注:跑不通换IP,ping不同如此,tftp和nfs哪里起来没关系;如果路是通的就会尝试连接打印TTT,如果提示host no alive就是没起来。


setenv ipaddr 192.168.0.100; setenv netmask 255.255.255.0; setenv serverip 192.168.0.1;setenv bootargs "console=ttyAMA0 root=/dev/mmcblk0 init=/linuxrc rw rootwait";

tftp 0x60003000 uImage; tftp 0x70003000 dtb; fdt addr 0x70003000; bootm 0x60003000 - 0x70003000

tftp 0x60000000 uImage; tftp 0x70003000 dtb; fdt addr 0x70003000; bootm 0x60003000 - 0x70003000

启动后配置好eth0 可以直接ping同tap0,可使用如tftp -gr dtb 192.168.0.1指令获取host资源。


参考:https://blog.csdn.net/konga/article/details/79595119

三,内核编译:

1, 清理
# make clean:清理大多数编译生成的文件,但会保留config文件等,make install 后再执行,不然 make install
会因为找不到需要安装的东西而重新make
# make mrproper: 清理所有编译生成的文件、 config及某些备份文件,几乎只在第一次执行内核编译前才用这条命令
# make distclean: mrproper、 patches以及编辑器备份文件

2,编译
安装arm的交叉编译工具链想必做嵌入式开发的朋友,对交叉编译工具链不陌生。
假设你订制一个交叉编译工具链,建议你使用crosstool-ng开源软件来构建。但在这里建议直接安装arm的交叉编译工具链:
sudo apt-get install gcc-arm-linux-gnueabi

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig      //生成vexpress开发板子的config文件
make CROSS_COMPILE=arm-linux-gnueabi- menuconfig        //去掉System Type 把 Enable the L2x0                                     //outer cache controller 取消,否则qemu起不来
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j8        //编译zImage生成的内核镱像位于arch/arm/boot/zImage,

make uImage CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm LOADADDR=0x60003000 -j4    //编译uImage


3,执行
执行命令非常easy,假设看到内核启动过程中的打印,说明前的搭建是成功的。

qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage -nographic -append "console=ttyAMA0"

-M vexpress-a9 模拟vexpress-a9单板,你能够使用-M ?參数来获取该qemu版本号支持的全部单板
-m 512M 单板执行物理内存512M
-kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage  告诉qemu单板执行内核镜像路径
-nographic 不使用图形化界面,仅仅使用串口
-append "console=ttyAMA0" 内核启动參数。这里告诉内核vexpress单板执行。串口设备是哪个tty。

四,制作跟文件系统

0,下载、编译和安装busybox

wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2

make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-

安装完毕后。会在busybox文件夹下生成_install文件夹。该文件夹下的程序就是单板执行所须要的命令。
先在Ubuntu主机环境下,形成文件夹结构,里面存放的文件和文件夹与单板上执行所须要的文件夹结构全然一样。
然后再打包成镜像(在开发板看来就是SD卡)。这个暂时的文件夹结构称为根文件夹

1.  创建rootfs文件夹(根文件夹),根文件系统内的文件全部放到这里

sudo mkdir rootfs

2. 拷贝busybox命令到根文件夹下

sudo cp busybox-1.20.2/_install/* -r rootfs/

3. 从工具链中拷贝执行库到lib文件夹下

sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/

4. 创建4个tty端终设备

sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4

5. 生成32M大小的镜像

dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32

6. 格式化成ext3文件系统

mkfs.ext3 a9rootfs.ext3

7. 将文件复制到镜像中

sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/*  tmpfs/
sudo umount tmpfs

四,系统启动执行
完毕上述全部步骤之后。就能够启动qemu来模拟vexpress开发板了,命令參数例如以下:

qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/qemu/linux/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

qemu-system-arm -soundhw all -f raw -M vexpress-a9 -m 512M -kernel /home/gjh/learning/vexpress/linux-4.4.39/arch/arm/boot/zImage -dtb /home/gjh/learning/vexpress/linux-4.4.39/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-4.4.39/arch/arm/boot/zImage -dtb linux-4.4.39/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

从内核启动打印,直到命令行提示符出现,接下来就可以进行linux app开发了。

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值