前置作业
准备以下文章的档案
u-boot: u-boot 安装与说明
rootfs: 建立 Root File System (rootfs)
STARTO! (用 root 权限执行)
先按照 建立 Root File System (rootfs) 的文章重做一个 rootfs 在 ~/virtualarm/rootfs
cd /home/eecs/virtualarm/
mkdir rootfs
注意:文章内的 /mnt/sdcard2 路径要更换成 rootfs/
更新在 virtualarm 底下的 debootstrap_armhf.sh 脚本
ROOTFS_DIR=rootfs/
DEBIAN_VERSION=buster
debootstrap \
--arch=armhf \
--keyring=/usr/share/keyrings/debian-archive-keyring.gpg \
--verbose \
--foreign \
$DEBIAN_VERSION \
$ROOTFS_DIR \
file:///home/ftp/debian做一个新的 sdcard.img,容量 500M,第一个分区容量 50M
nano create_image.sh
SD_IMAGE=sdcard2.img SD_IMAGE_SIZE=500M SD_IMAGE1=sdcard2.img1 SD_IMAGE2=sdcard2.img2 PART1_SIZE=50M PART1_OFFSET=1 PART1_SECTORS=1 PART1_BLOCKS=1 PART2_OFFSET=1 PART2_SECTORS=1 PART2_BLOCKS=1 LOOP0=/dev/loop0 LOOP1=/dev/loop1 LOOP2=/dev/loop2 MOUNT_DIR1=/mnt/sdcard1 MOUNT_DIR2=/mnt/sdcard2 echo "建立挂载资料夹" mkdir $MOUNT_DIR1 2>/dev/null mkdir $MOUNT_DIR2 2>/dev/null sleep 1 echo "建立完成,开始解除挂载资料夹 $MOUNT_DIR1 $MOUNT_DIR2" umount $MOUNT_DIR1 2>/dev/null umount $MOUNT_DIR2 2>/dev/null sleep 1 echo "清除连接装置 $LOOP2" losetup -d $LOOP2 2>/dev/null echo "清除连接装置 $LOOP1" losetup -d $LOOP1 2>/dev/null echo "清除连接装置 $LOOP0" losetup -d $LOOP0 2>/dev/null sleep 1 echo "建立虚拟 SD 卡 $SD_IMAGE 中" dd if=/dev/zero of=$SD_IMAGE bs=$SD_IMAGE_SIZE count=1 2>/dev/null echo "建立完成" sleep 1 echo "更改使用者权限" chown eecs:eecs $SD_IMAGE echo "开始执行虚拟映像 $SD_IMAGE 的分割 (PART1: 建立脚本)..." cat > /tmp/fdisk.cmd << EOF n p 1 +$PART1_SIZE t b n p 2 w EOF echo "脚本建立完成" sleep 1 echo "开始执行虚拟映像 $SD_IMAGE 的分割 (PART2: 执行脚本)..." fdisk $SD_IMAGE < /tmp/fdisk.cmd >/dev/null echo "分割完成" sleep 1 echo "开始计算分割所需容量..." PART1_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE1 | tr -s ' ' | cut -d\ -f 2` PART1_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE1 | tr -s ' ' | cut -d\ -f 4` PART1_BLOCKS=`expr $PART1_SECTORS / 2` PART2_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE2 | tr -s ' ' | cut -d\ -f 2` PART2_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE2 | tr -s ' ' | cut -d\ -f 4` PART2_BLOCKS=`expr $PART2_SECTORS / 2` echo "计算完成" sleep 1 echo "开始将 $SD_IMAGE 连接至 $LOOP0 上" losetup $LOOP0 $SD_IMAGE echo "开始将 $SD_IMAGE1 连接至 $LOOP1 上" losetup -o `expr $PART1_OFFSET \* 512` $LOOP1 $LOOP0 echo "开始将 $SD_IMAGE2 连接至 $LOOP2 上" losetup -o `expr $PART2_OFFSET \* 512` $LOOP2 $LOOP0 # echo PART1_OFFSET=$PART1_OFFSET, PART1_BLOCKS=$PART1_BLOCKS # echo PART2_OFFSET=$PART2_OFFSET, PART2_BLOCKS=$PART2_BLOCKS sleep 1 echo "装置连接完成,执行格式化..." mkdosfs -s 2 $LOOP1 $PART1_BLOCKS 2>/dev/null mkfs.ext4 -O ^metadata_csum,^64bit $LOOP2 >/dev/null sleep 1 echo "格式化完成,执行挂载..." mount $LOOP1 $MOUNT_DIR1 mount $LOOP2 $MOUNT_DIR2 echo "挂载完成。" echo ""
sh create_image.sh
检查一下挂载有没有成功
df -h
losetup -a
先把核心复制到 /mnt/scard1 底下的目录
cd ~eecs/virtualarm/
cp ~eecs/virtualarm/kernel/linux-3.16.81/arch/arm/boot/uImage /mnt/sdcard1
再来复制 root file system 到 rootfs 进去
rsync -av rootfs/ /mnt/sdcard2
最后复制 uboot 档案进去 /mnt/sdcard1,有以下两个档案
- u-boot
- u-boot.bin
cp bootloader/u-boot-2016.09/u-boot /mnt/sdcard1
cp bootloader/u-boot-2016.09/u-boot.bin /mnt/sdcard1
试着开机吧!
cd bootloader/u-boot-2016.09
qemu-system-arm -machine vexpress-a9 -m 256 -nographic -kernel u-boot -drive file=../../sdcard2.img,if=sd,format=raw,index=0
载入核心
fatload mmc 0:1 0x60000000 uimage

再次试着重新开机
bootm 0x60000000
再来要设定环境变数让他可以开机
setenv bootargs console=ttyAMA0,38400n8 root=/dev/mmcblk0p2
再次尝试开机
bootm 0x60000000

已经成功开机,输入帐号 root,密码 leenix123 进入系统

至此,开几完成
网路连线以及桥接设定
查看一下虚拟机的 IP 位址
ip addr show

※补充:如果没有 IP 位址,说明 interfaces 没有设定好,请编辑档案
nano /etc/network/interfaces
将里面的 enp2s0 改成 eth0 (共 2 处),修改完成后重新开机即可
将以下脚本存成 runsd.sh
MACHINE=vexpress-a9 #SD_IMAGE=sdcard.img SD_IMAGE=sdcard2.img #SD_IMAGE=sd_512M.img #FLASH_IMG=flash.img KERNEL_VERSION=3.16.81 UBOOT_VERSION=2016.09 MAC="52:54:12:34:00:A0" BRIDGE=br10 MEMORY=256 #MEMORY=1024 qemu-system-arm -machine $MACHINE -m $MEMORY \ -serial stdio \ -drive file=./$SD_IMAGE,if=sd,format=raw,index=0 \ -kernel ./bootloader/u-boot-$UBOOT_VERSION/u-boot \ -net nic,macaddr=$MAC -net bridge,br=$BRIDGE
执行这个脚本
sh runsd.sh
会无法开机…下礼拜待续
Latest posts by SHXJ (see all)
- 受保护的内容: NAS 版 Mathbot 管理网站与 Linebot 启动方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 数学游戏 - 2021 年 6 月 8 日






在〈整合虚拟 SD 卡〉中有 1 则留言