Single

H618 移植ubuntu 22.04 rootfs

前言

上次移植的buildroot的rootfs,这次尝试添加ubuntu的rootfs

下载相关软件

先下载Ubuntu-base,下载地址:http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/

下载arm64版本,并解压到:

wget http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-arm64.tar.gz
mkdir rootfs
tar -xzvf ubuntu-base-22.04-base-arm64.tar.gz -C rootfs

安装qemu-arm-static并复制到rootfs内

sudo apt-get install qemu-user-static
sudo cp /usr/bin/qemu-arm-static ./rootfs/usr/bin/

由于我们后面要把这个阿荣嘛版本的rootfs挂载到当前系统上面,而我们主机是64位的虚拟机,所以需要用到qemu-arm-static这个工具,这个工具可以来模拟arm架构,从而执行arm架构的二进制文件。

接下来就是挂载rootfs

sudo mount -t proc /proc ./rootfs/proc
sudo mount -t sysfs /sys ./rootfs/sys
sudo mount -o bind /dev ./rootfs/dev
sudo mount -o bind /dev/pts ./rootfs/dev/pts
sudo chroot /home/qubot/rootfs

执行完了可以发现用户变了

先换个源,由于自带的没有vi,nano等,所以我用的是vscode编辑的,将rootfs/etc/apt/sources.list里面的内容换成一下的

地址:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/

更新源:

apt update

这时候会报错:

Temporary failure resolving 'mirrors.tuna.tsinghua.edu.cn'

原因是etc/resolv.conf文件是空的,这是dns服务器的配置目录,添加下面的代码:

nameserver 8.8.8.8
options edns0 trust-ad
search localdomain

重新更新

apt update

接下来是另一个报错

No system certificates available. Try installing ca-certificates.

原因:证书可能过期了?或者根本没有证书
解决办法:安装ca-certificates
下载地址:https://pkgs.org/download/ca-certificates
或者http://archive.ubuntu.com/ubuntu/pool/main/c/ca-certificates/
http://ports.ubuntu.com/pool/main/c/ca-certificates/ca-certificates_20211016_all.deb
由于没有wget等命令,需要在浏览器中下载之后复制进去,然后安装

dpkg -i ca-certificates_20211016_all.deb

参考地址:https://blog.csdn.net/weixin_49700990/article/details/122005632

继续报错:差依赖openssl依赖

继续下载openssl:
http://ports.ubuntu.com/pool/main/o/openssl/openssl_3.0.2-0ubuntu1_arm64.deb

dpkg -i openssl_3.0.2-0ubuntu1_arm64.deb

重新安装ca-certificates

更新
apt update

接着报错Couldn’t create temporary file /tmp/apt.conf.xFdii0 for passing config to apt-key

sudo chmod 777 tmp

重新更新就好了

然后安装基本软件:

sudo apt install sudo vim nano kmod net-tools ethtool ifupdown rsyslog htop iputils-ping language-pack-en-base ssh

修改密码,添加用户名

passwd root
adduser pi

添加主机名和ip

echo "bpi-m2h" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 bpi-m2h" >> /etc/hosts

设置串口终端

ln -s lib/systemd/system/getty@.service etc/systemd/system/getty.target.wants/getty@ttyS0.service

取消挂载或者重启
打包

sudo tar -czvf rootfs.tar.gz rootfs/*

复制到卡内

sudo cp rootfs.tar.gz /mnt/rootfs
tar -xzvf rootfs.tar.gz

取消挂载并插到卡里
进到u-boot,修改bootargs变量并保存

setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw'
saveenv

启动成功,但是有个问题,为啥不更新到最下面,我直接回车都最后面再登陆。

登录之后会发现一个模块都没有

接下里就是解决这个问题
编译模块

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j12 modules

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/rootfs modules modules_install

这里的路径是挂载的rootfs目录,构建成功后,可以在/mnt/rootfs目录中找到模块

安装头文件

make ARCH=arm64 INSTALL_HDR_PATH=/mnt/rootfs/usr headers_install

参考https://www.cnblogs.com/zzssdd2/p/15485283.html
https://blog.csdn.net/m0_54251560/article/details/131711075
https://forum.rocketboards.org/t/a-start-job-is-running-for-dev-ttys0-device/305/3

暂无评论

发表评论