linux开发之制作Ubuntu根文件系统

首先在http://cdimage.ubuntu.com/ubuntu-base/releases/网址下载对应的ubuntu根文件系统源码,链接地址如下图所示,我们这里使用的是20.04版本的ubuntu源码
在这里插入图片描述
然后进入下图所示的选项
在这里插入图片描述
执行下载我们所需要的文件
在这里插入图片描述
选择上图所示的文件进行下载。下载完成后将文件复制到我们的开发机器上。
在这里插入图片描述
在开发机器上对文件进行解压缩操作,如上图命令。解压缩完成后的文件夹如下图所示
在这里插入图片描述
可以查看我们开机机上是否有 /usr/bin/qemu-arm-static文件,如果没有则 在开发机上执行 apt-get install qemu-user-static安装qemu相关工具即可,然后在根文件系统根目录下执行命令sudo cp /usr/bin/qemu-arm-static ./usr/bin/复制文件即可,如下图所示。
在这里插入图片描述
接着拷贝开发机上的DNS配置文件到我们制作的根文件系统上,执行命令 sudo cp /etc/resolv.conf ./etc/即可,如下图所示。
在这里插入图片描述
接着修改默认源,使用命令sudo vim etc/apt/sources.list打开文件即可,如下图所示
在这里插入图片描述
然后将里面的内容全部删除,替换成如下内容

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

替换后的如下图所示,我们的默认源也是好了的。
在这里插入图片描述
这些完成后,就可以在主机上去测试看看我们的根文件系统是否可以使用了。
如下图先创建个挂载某些文件系统的脚本文件。
在这里插入图片描述
文件内容如下

TOP_DIR=$(cd $(dirname $0) && pwd)
sudo mount -t proc /proc $TOP_DIR/proc
sudo mount -t sysfs /sys $TOP_DIR/sys
sudo mount -o bind $TOP_DIR/dev
sudo mount -o bind /dev/pts $TOP_DIR/dev/pts
sudo chroot $TOP_DIR

然后修改脚本文件权限 sudo chmod 777 mount.sh即可。接着添加个取消挂载的脚本,文件内容如下

TOP_DIR=$(cd $(dirname $0) && pwd)
sudo umount  $TOP_DIR/proc
sudo umount  $TOP_DIR/sys
sudo umount  $TOP_DIR/dev
sudo umount  $TOP_DIR/dev/pts

同样的也要修改脚本文件的权限sudo chmod 777 unmount.sh即可。执行挂载脚本./mount.sh即可
执行passwd root设置我们的密码,输入两次密码即可,设置成功如下图所示
在这里插入图片描述
然后设置下本机名称 echo "test_root" > /etc/hostname即可,然后执行exit退出根文件系统,接着执行./unmount.sh脚本,取消我们的挂载文件。
遇到的问题 /bin/sh: 0: can't access tty; job control turned of,这个问题主要是找不到init进程,我这边安装systemd后也没有,查看其他的是使用/sbin/init链接到/lib/systemdsystemd上,这样就可以解决这个问题了
在这里插入图片描述
其中lib/systemd/system/getty@.service文件内容如下

[Unit]
Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
After=rc-local.service

# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes

# IgnoreOnIsolate causes issues with sulogin, if someone isolates
# rescue.target or starts rescue.service from multi-user.target or
# graphical.target.
Conflicts=rescue.service
Before=rescue.service

# On systems without virtual consoles, don't start any getty. Note
# that serial gettys are covered by serial-getty@.service, not this
# unit.
ConditionPathExists=/dev/tty0

[Service]
# the VT is cleared by TTYVTDisallocate
# The '-o' option value tells agetty to replace 'login' arguments with an
# option to preserve environment (-p), followed by '--' for safety, and then
# the entered username.
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes

# Unset locale for the console getty since the console has problems
# displaying some internationalized messages.
UnsetEnvironment=LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION

[Install]
WantedBy=getty.target
DefaultInstance=tty1

问题2 Timed out waiting for device /dev/ttyFIQ0,这是tty服务造成的

[  OK  ] Started System Logging Service.
[ TIME ] Timed out waiting for device /dev/ttyFIQ0.
[DEPEND] Dependency failed for Serial Getty on ttyFIQ0.
[  OK  ] Reached target Login Prompts.ev/ttyFIQ0 (59s / 1min 30s)
[  OK  ] Reached target Multi-User System.tyFIQ0 (53s / 1mi
[  OK  ] Reached target Graphical Interface.FIQ0 (45s / 1mi
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Finished Update UTMP about System Runlevel Changes.
DDR V1.14 b1f29a2a6f typ 22/09/02-16:40:04tyFIQ0 (8s / 1min

如下图所示
在这里插入图片描述
解决方式:在根文件系统里面执行 apt-get install udev即可。安装一些常用命令,这边我是用脚本的方式让它运行

cat << EOF | sudo chroot $TARGET_ROOTFS_DIR
apt-get update
apt install sudo usbutils -fy
apt install rsyslog net-tools udhcpc -fy
apt install udev htop iputils-ping -fy
DEBIAN_FRONTEND=noninteractive apt-get install -fy systemd
ln -s /lib/systemd/systemd /sbin/init
echo -e "root\nroot" | passwd root
useradd -s '/bin/bash' -m -G adm,sudo hzmct
echo -e "hzmct\nhzmct" | passwd hzmct
echo "hzmct" > /etc/hostname
echo "127.0.0.1  localhost" > /etc/hosts
echo "127.0.0.1  hzmct" >> /etc/hosts
EOF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值