前置作业
请先基础了解此篇文章的内容:自动化建立、分割、格式化、挂载虚拟映像档
桥接介面也要先做好:每次开机自动建立 br10 虚拟桥
最后也要架设自己的镜像站:架设自干镜像站
什么是 Root File System(rootfs)?
所谓的 rootfs 就是开机后系统必须读取的安装系统,简单来说就是整个系统的根目录 (/)
由于这个学期做的是嵌入式系统,这是一个微型的 linux 系统
因此其 rootfs 大部份来说与 PC Linux 的磁碟分割配置会不同
一般 PC Linux 会有分成好几个分割区
但是嵌入式系统就只有一个分割区。
STARTO!
建立一个虚拟 sdcard.img
建立一个档案名为 create_image.sh,输入以下程式码
SD_IMAGE=sdcard.img SD_IMAGE_SIZE=1G SD_IMAGE1=sdcard.img1 SD_IMAGE2=sdcard.img2 PART1_SIZE=80M 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 "装置连接完成,执行格式化..." apt-get install dosfstools -y >/dev/null mkdosfs -s 2 $LOOP1 $PART1_BLOCKS 2>/dev/null mkfs.ext4 $LOOP2 >/dev/null sleep 1 echo "格式化完成,执行挂载..." mount $LOOP1 $MOUNT_DIR1 mount $LOOP2 $MOUNT_DIR2 echo "挂载完成。" echo ""
使用root 权限,执行这个脚本
su -
cd /home/eecs/
sh create_image.sh
待脚本执行完成后,虚拟装置分割区 1、2 即挂载完成到系统上,可以确认一下
df -h
更新自己的镜像站
请先执行一次取得校外镜像站的 getdeb.sh 脚本
或是执行取得 pominglee 镜像站的指令
把本身电脑的镜像站更新到最新
一样要使用 root 权限
安装基本套件
安装建立 rootfs 的套件
apt-get install debootstrap -y
安装 qemu-user-static 套件
apt-get install qemu-user-static -y
建立一个建立 rootfs 的脚本(使用 eecs 权限)
进入 ~/virtualarm
cd ~/virtualarm
新建一个档案名为 debootstrap_armhf.sh
nano debootstrap_armhf.sh
ROOTFS_DIR=/mnt/sdcard2
DEBIAN_VERSION=buster
debootstrap \
--arch=armhf \
--keyring=/usr/share/keyrings/debian-archive-keyring.gpg \
--verbose \
--foreign \
$DEBIAN_VERSION \
$ROOTFS_DIR \
file:///home/ftp/debian使用 root 权限,执行这个脚本
su -
cd /home/eecs/virtualarm
sh debootstrap_armhf.sh
完成后检查一下档案有没有写入 /mnt/sdcard2
df -h
第1阶段告一段落,请执行复制虚拟执行环境(一样使用 root 权限)
cp /usr/bin/qemu-arm-static /mnt/sdcard2/usr/bin/
再来进入 chroot 环境
chroot /mnt/sdcard2 /bin/bash
执行以下指令执行第2阶段
/debootstrap/debootstrap --second-stage
会执行一段时间,请耐心等待,结束后会看到这个画面
设定虚拟机器里面的环境
总共要做以下这些事情(注意:要在 chroot 的虚拟机里面做)
- root 密码:leenix123
- 新增一个使用者帐号 leenix/密码: leenix123
- 设定 locale (可装/可不装)
- 设定网路
- 设定 apt 来源
- 架设 apache 伺服器
- 设定主机名称
- 清理不必要档案以节省空间
设定 root 密码:leenix123
echo root:leenix123 | chpasswd
新增一个使用者帐号 leenix/密码: leenix123
useradd leenix
echo leenix:leenix123 | chpasswd
设定网路
进入 interfaces ,贴上以下设定档。储存并退出
nano /etc/network/interfaces
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.10.100 netmask 255.255.255.0 geteway 192.168.10.1
设定 apt 来源
先编辑 sources.list 档案
nano /etc/apt/sources.list
输入以下内容(注意以下IP:127.117.72.23部份,请替换成自己电脑的IP)
deb http://127.117.72.23/debian/ buster main contrib non-free
deb http://security.debian.org/debian-security buster/updates main
储存并退出,输入指令更新套件清单
apt-get update
架设 apache 伺服器
安装 apache2 套件并启用开机自动启动套件
apt-get install apache2 -y
systemctl enable apache2
查看 apache2 启动状态
systemctl is-enabled apache2
设定主机名称
echo arm_leenix > /etc/hostname
清理不必要档案以节省空间
基础清除
首先看一下现在虚拟机占了多少空间,在实体机下指令
df -h
下指令清除不必要的东西
apt-get clean
再看一次占了多少空间
df -h
跳出 chroot 环境
exit
至此,rootfs 基本设定结束。
解除挂载虚拟机
解除挂载 /mnt/sdcard
umount /mnt/sdcard2
umount /mnt/sdcard1
解除连接 sdcard.img
losetup -d /dev/loop2
losetup -d /dev/loop1
losetup -d /dev/loop0
- 受保护的内容: NAS 版 Mathbot 管理网站与 Linebot 启动方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 数学游戏 - 2021 年 6 月 8 日















在〈建立 Root File System (rootfs)〉中有 2 则留言