qemu使用uboot通过网络加载 linux kernel。
参考文章:
https://www.zhaixue.cc/qemu/qemu-u-boot.html
https://zhuanlan.zhihu.com/p/547338158
1 #!/bin/sh 2 3 4 # 参考网址: 5 # https://www.zhaixue.cc/qemu/qemu-u-boot.html 6 # https://zhuanlan.zhihu.com/p/547338158 7 8 9 # 1. 10 # 修改busybox的Makefile的两个变量为: 11 # ARCH ?= arm 12 # CROSS_COMPILE ?= arm-linux-gnueabi- 13 # 14 cd u-boot-2022.10/ 15 vim Makefile 16 17 18 19 # 2. 20 # 编译, 如果出现错误, 安装: sudo apt install libssl-dev 21 make vexpress_ca9x4_defconfig 22 make -j 4 23 24 25 26 # 3. 27 # 使用qemu启动u-boot进行测试 28 sh testiboot/test_uboot.sh 29 # test_uboot.sh内容 30 # #!/bin/sh 31 # # 测试u-boot 32 # # 上级路径 33 # top_path="/home/thinks2/ProgramProject/qemu_study/" 34 # src_path="tftpboot/u-boot" 35 # # 内核文件路径 36 # kernel_path=${top_path}${src_path} 37 # qemu-system-arm \ 38 # -M vexpress-a9 \ 39 # -m 512M \ 40 # -kernel ${kernel_path} \ 41 # -sd rootfs.ext3 \ 42 # -nographic \ 43 44 45 46 # 4. 47 # 准备uImage内核, 指定加载地址, 编译uImage 48 cd .. 49 cd linux-4.19.269/ 50 make LOADADDR=0x60003000 uImage -j 4 51 52 53 54 # 5. 55 # 细心的朋友发现, 目前加载u-boot的方法使用还是-kernel选项, 也就是把u-boot当做内核挂载的, 56 # 而真实的系统启动, 不可能同时挂载两个内核启动(只能选择一个启动). 那么, 如何来模拟呢? 57 # 58 # u-boot实体机中, 我们常常采用tftp引导内核, 我们也可以在启动u-boot以后, 让u-boot通过tftp引导内核. 59 # 需要做两件事情: 60 # 1.搭建好tftp环境 61 # 2.构建网桥, 让qemu可以访问, 从而让qemu和ubuntu之间可以通过该网桥来访问 62 63 # 安装tftp和相关依赖, 设置好路径 64 sudo apt install tftp-hpa tftpd-hpa xinetd uml-utilities bridge-utils 65 66 # 设置tftp配置路径文件 67 sudo vim /etc/default/tftpd-hpa 68 # 将下面的内容复制近来 69 TFTP_USERNAME="tftp" 70 TFTP_DIRECTORY="/home/thinks2/ProgramProject/qemu_study/tftpboot" # 该路径即为tftp可以访问到的路径 71 TFTP_ADDRESS="0.0.0.0:69" 72 TFTP_OPTIONS="-l -c -s" 73 74 # 配置完以后, 创建tftp目录, 给最高权限. 把内核, 设备树, 根文件系统,u-boot全部复制到这里 75 cd .. 76 mkdir tftpboot 77 cd tftpboot 78 cp ../u-boot-2022.10/u-boot ./ 79 cp ../linux-4.19.269/arch/arm/boot/uImage ./ 80 cp ../linux-4.19.269/arch/arm/boot/dts/vexpress-v2p-ca9.dtb ./ 81 # 重启tftp服务 82 sudo /etc/init.d/tftpd-hpa restart 83 84 85 86 # 6. 87 # 修改网卡信息, 设置桥接 88 ifconfig # 查看网卡名 89 90 # 修改/etc/netplan/01-network-manager-all.yaml的信息配置: 91 sudo vim /etc/netplan/01-network-manager-all.yaml 92 # t添加以下内容: 93 ethernets: 94 # 这里设置的是你还需要上网的网卡, ifconfig查看 95 wlp0s20f3: 96 dhcp4: yes 97 # 这里设置的是br0桥接到的网卡 98 enp0s31f6: 99 dhcp4: yes 100 bridges: 101 #这里设置的是br0网桥 102 br0: 103 dhcp4: yes 104 interfaces: 105 # 声明br0网桥接入的网卡是wlp0s20f3 106 - wlp0s20f3 107 108 # 输入sudo netplan apply使其生效, 再输入ifconfig查看网卡信息 109 sudo netplan apply 110 ifconfig 111 112 113 114 # 7. 115 # 修改/etc/qemu-ifdown信息配置 116 sudo vim /etc/qemu-ifdown 117 # 添加以下内容: 118 echo sudo brctl delif br0 $1 119 sudo brctl delif br0 $1 120 121 echo sudo tunctl -d $1 122 sudo tunctl -d $1 123 124 echo brctl show 125 brctl show 126 127 128 129 # 8. 130 # 修改/etc/qemu-ifup信息配置 131 sudo vim /etc/qemu-ifup 132 # 添加以下内容: 133 echo sudo tunctl -u $(id -un) -t $1 134 sudo tunctl -u $(id -un) -t $1 135 136 echo sudo ifconfig $1 0.0.0.0 promisc up 137 sudo ifconfig $1 0.0.0.0 promisc up 138 139 echo sudo brctl addif br0 $1 140 sudo brctl addif br0 $1 141 142 echo brctl show 143 brctl show 144 145 # 这里设置的是网桥br0的地址 146 sudo ifconfig br0 192.168.2.13 147 148 149 150 # 9. 151 # 修改test_uboot.sh, 添加: 152 # -nic tap,ifname=tap0 \ 153 # -append "root=/dev/mmcblk0 rw console=ttyAMA0" \ 154 vim test_uboot.sh 155 # 输入启动指令, 需要以sudo方式启动test_uboot.sh再启动 156 sudo sh test_uboot.sh 157 # test_uboot.sh内容: 158 # #!/bin/sh 159 # # 测试u-boot 160 # # 上级路径 161 # top_path="/home/thinks2/ProgramProject/qemu_study/" 162 # src_path="tftpboot/u-boot" 163 # # 内核文件路径 164 # kernel_path=${top_path}${src_path} 165 # qemu-system-arm \ 166 # -M vexpress-a9 \ 167 # -m 512M \ 168 # -kernel ${kernel_path} \ 169 # -nic tap,ifname=tap0 \ 170 # -append "root=/dev/mmcblk0 rw console=ttyAMA0" \ 171 # -sd rootfs.ext3 \ 172 # -nographic \ 173 174 175 176 # 10. 177 # 此时敲击enter键, 进入u-boot交互模式, 输入以下内容: 178 179 # 设置u-boot这边的地址(和br0同一网段即可) 180 setenv ipaddr 192.168.2.15 181 # 设置服务器地址(br0网桥的地址) 182 setenv serverip 192.168.2.13 183 184 # 从tftpboot下载uImage 185 tftpboot 0x60003000 uImage 186 # 从tftpboot下载设备树 187 tftpboot 0x60500000 vexpress-v2p-ca9.dtb 188 189 # 设置根文件系统挂载位置、权限、控制台设备 190 setenv bootargs "root=/dev/mmcblk0 rw console=ttyAMA0" 191 192 # 设置启动地址 193 bootm 0x60003000 - 0x60500000 194
最终的qemu的加载运行脚本test_uboot.sh:
1 #!/bin/sh 2 3 4 # 测试u-boot 5 6 # 上级路径 7 top_path="/home/thinks2/ProgramProject/qemu_study/" 8 src_path="tftpboot/u-boot" 9 10 # 内核文件路径 11 kernel_path=${top_path}${src_path} 12 13 qemu-system-arm \ 14 -M vexpress-a9 \ 15 -m 512M \ 16 -kernel ${kernel_path} \ 17 -nic tap,ifname=tap0 \ 18 -append "root=/dev/mmcblk0 rw console=ttyAMA0" \ 19 -sd rootfs.ext3 \ 20 -nographic \
标签:kernel,uboot,sudo,boot,sh,linux,path,qemu From: https://www.cnblogs.com/weitao-miao/p/17035857.html