海鸥派SS928V100_Ubuntu文件系统移植
前言
海思平台移植Ubuntu文件系统,下面以海鸥派SS928为例移植Ubuntu-base(20.04/22.04)为例。
一、Ubuntu-base文件下载
①. 官网下载:https://cdimage.ubuntu.com/ubuntu-base/releases/
②. 下载ubuntu-base-22.04.1-base-arm64.tar.gz并解压至ubuntu2204
二、Ubuntu系统环境搭建
1. 安装qemu模拟器
sudo apt update
sudo apt install qemu-user-static binfmt-support
将 qemu 可执行文件复制进文件系统。
sudo cp /usr/bin/qemu-aarch64-static ubuntu2204/usr/bin/
2. 换源并配置DNS
1). 换源
cp ubuntu2204/etc/apt/sources.list ubuntu2204/etc/apt/sources.ubuntu
vi ubuntu2204/etc/apt/sources.list
查看Ubuntu 开发代号, 替换sources.list 的内容, 例如Ubuntu20.04 需要将 ‘jammy’ 改成 ’focal’。
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
2). 添加dns域名解析服务器地址
nameserver 114.114.114.114
nameserver 8.8.8.8
三、在宿住机里挂载Ubuntu文件系统
1. 方式一 使用chroot
①. 新建ubuntu_chroot.sh
#!/bin/bash
mnt() {
echo "MOUNTING"
mount -t proc /proc ${2}/proc
mount -t sysfs /sys ${2}/sys
mount -o bind /dev ${2}/dev
mount -o bind /dev/pts ${2}/dev/pts
chroot ${2}
}
umnt() {
echo "UNMOUNTING"
umount ${2}/proc
umount ${2}/sys
umount ${2}/dev/pts
umount ${2}/dev
}
if [ "$1" = "-m" ] && [ -n "$2" ]; then
mnt $1 $2
echo "mnt -m pwd"
elif [ "$1" = "-u" ] && [ -n "$2" ]; then
umnt $1 $2
echo "umnt -u pwd"
else
echo ""
echo "Either 1st, 2nd or both parameters"
echo ""
echo "1st parameter can be one of these: -m"
echo "2nd parameter is the full path of root"
echo ""
echo "For example: chroot_ubuntu -m ubuntu22.04"
echo ""
echo "1st parameter: ${1}"
echo "2nd parameter: ${2}"
fi
②. 挂载Ubuntu文件系统
./ubuntu_chroot.sh -m ubuntu2004 # 运行命令挂载,进入ubuntu2004系统。
./ubuntu_chroot.sh -u ubuntu2004 # exit退出后运行命令卸载! 非常重要,退出后及时卸载
2. 方式二 使用 systemd-nspawn
①. 下载依赖
sudo apt install systemd-container
systemd-nspawn --version # 验证安装
②. 新建ubuntu_chroot.sh
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <rootfs_folder>"
echo "eg: $0 Ubuntu22.04"
exit 1
fi
# UBUNTU_FOLDER=$1
UBUNTU_FOLDER=${1%/}
sudo systemd-nspawn -D ${UBUNTU_FOLDER}
③. 挂载Ubuntu文件系统
./nspawn.sh Ubuntu22.04
四、在挂载的Ubuntu文件系统里安装基础应用
1. 更新软件包
apt-get update
apt upgrade -y
可能会有报错:
解决方式:
chown root:root /tmp
chmod 1777 /tmp
2. 安装一些基础组件
apt-get install vim
apt-get install net-tools
apt-get install iputils-ping
apt-get install systemd
apt-get install udev
apt-get install haveged
apt-get install kmod
apt-get install telnetd
apt-get install ssh
apt-get install udhcpc
①. 安装systemd之后,若没有/sbin/init文件,需创建启动程序链接。
ln -s /lib/systemd/systemd /sbin/init
②. 设置登录密码
串口/telnet/ssh连接时需要使用用户密码登录。
③. telnet连接需要修改/usr/lib/telnetlogin的权限
④. ssh 连接需要修改/etc/ssh/sshd_config中PermitRootLogin部分
⑤. 替换 dash 为 bash:解决 sh 脚本执行问题
rm /bin/sh
ln -s bash /bin/sh
⑥. 添加启动脚本/etc/rc.local, 并添加可执行权限
#!/bin/bash
ifconfig eth0 up
ifconfig lo up
ifconfig eth0 192.168.5.100
五、快速打包验证
1. 检查文件系统大小
2. 打包文件系统
#打包ext4格式
dd if=/dev/zero of=./ubuntu_2204_rootfs_1G.ext4 bs=1M count=1024
fakeroot mkfs.ext4 -d ubuntu2204 ubuntu_2004_rootfs_1G.ext4
fakeroot 会让 mkfs.ext4 以“看起来是 root”的权限运行,但实际不会影响你的主机文件归属,文件再板子上归属为root。
3. 烧录验证文件系统
①. 烧录完成检查是否能正常启动,有无报错, 启动需要内核开启CGROUP,参考第六节
注意: Ubuntu20.04 可能会卡在 A start job is running for Load/Save Random Seed 。
解决方式:考虑修改haveged.service与systemd-random-seed.service的启动顺序与依赖关系。修改启动顺序为haveged在random之前。
vi /lib/systemd/system/systemd-random-seed.service
vi /lib/systemd/system/haveged.service

②. 测试telnetd/ssh

六、内核开启CGROUP
内核需要开启CGROUP,重新编译、烧录。


- 分享
- 举报
暂无数据-
浏览量:1491次2025-04-16 17:12:31
-
浏览量:2274次2024-06-06 10:17:20
-
浏览量:3494次2024-01-07 22:19:19
-
浏览量:1377次2025-02-05 14:33:55
-
浏览量:2676次2024-03-29 11:19:21
-
浏览量:2414次2024-03-29 10:57:19
-
浏览量:3447次2023-01-31 22:06:55
-
浏览量:1825次2023-12-24 13:08:48
-
浏览量:427次2025-09-15 15:30:08
-
浏览量:834次2025-02-05 13:22:59
-
浏览量:7028次2022-09-21 14:30:18
-
浏览量:12730次2022-11-10 18:07:40
-
浏览量:851次2025-07-15 09:48:44
-
浏览量:3704次2017-11-16 11:37:49
-
浏览量:3113次2025-01-05 00:30:11
-
浏览量:2423次2023-04-03 15:28:29
-
浏览量:2773次2023-04-03 15:51:40
-
浏览量:2458次2017-12-15 16:32:59
-
浏览量:1982次2024-11-21 20:16:20
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
Sunshine
微信支付举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明

微信扫码分享
QQ好友