飞凌OKMX8MP-C开发板AI项目分享-移植Ubuntu20.04文件系统

本文介绍在OKMX8MPQ-C开发板上,基于OK8MP-linux-sdk移植ubuntu 20.04文件系统,实现cli的登录界面,base之前文章飞凌OKMX8MP-C开发板AI项目分享-开箱及WSL2编译环境搭建的编译环境实现,具体步骤如下:

1.准备Ubuntu 20.04镜像

为了方便后续用原有的编译指令合成镜像,我们需要提前将准备好的ubuntu base文件放入以下目录“~/forlinx/OK8MP-linux-sdk/OK8MP-linux-fs”,或者进入“~/forlinx/OK8MP-linux-sdk/OK8MP-linux-fs”目录下载你想要移植的Ubuntu base文件。

进入SDK中放置文件系统的目录

cd ~/forlinx/OK8MP-linux-sdk/OK8MP-linux-fs

用以下指令下载Ubuntu 20.04.05

wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.5-base-arm64.tar.gz

 2.解压ubuntu base文件系统

将OK8MP-linux-sdk中原有的rootfs重命名为 rootfs_linux

mv rootfs rootfs_linux

并创建一个rootfs名称文件夹存放根文件系统

mkdir rootfs

解压ubuntu base文件系统到rootfs目录

tar -xvf ubuntu-base-20.04.1-base-arm64.tar.gz -C rootfs

如下图

 3.安装qemu 模拟器环境

在ubuntu 16.04中使用以下指令安装qemu

sudo apt-get install qemu-user-static

4.将qemu文件拷贝到ubuntu base文件系统

使用以下指令进行拷贝相关文件到usr/bin/目录下

cp /usr/bin/qemu-arm-static rootfs/usr/bin/
cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/

5.配置wsl2的qemu环境

以下两条指令需要在每次打开WSL2终端时输入

sudo update-binfmts --enable qemu-aarch64
sudo update-binfmts --import

如果不输入在后面步骤挂载文件系统,会出现以下异常

chroot: failed to run command '/bin/bash': Exec format error

 如下图:

6.拷贝内核驱动、固件到ubuntu base文件系统中

使用以下指令,从原来的linux文件系统中拷贝到ubuntu base目录(rootfs_linux是SDK中原来的文件系统)

mkdir -p rootfs/lib/modules
cp -Ppr rootfs_linux/lib/modules/* rootfs/lib/modules/
cp -Ppr rootfs_linux/lib/firmware/* rootfs/lib/firmware/

  7.更换Ubuntu base系统源

为了加速后续需要的依赖包安装,使用以下指令将源更换为中国科学技术大学开源软件镜像

sudo sed -i 's|ports.ubuntu.com|mirrors.ustc.edu.cn|g' rootfs/etc/apt/sources.list

8.创建挂载Ubuntu base的脚本

使用vim或者nano指令创建ch-mount.sh

vim ch-mount.sh

输入以下内容

#!/bin/bash

function mnt() {
    echo "MOUNTING"
    sudo mount -t proc /proc ${2}/proc
    sudo mount -t sysfs /sys ${2}/sys
    sudo mount -o bind /dev ${2}/dev
    sudo mount -o bind /dev/pts ${2}/dev/pts

    sudo chroot ${2}
}

function umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}/proc
    sudo umount ${2}/sys
    sudo umount ${2}/dev/pts
    sudo umount ${2}/dev
}

if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
    mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
else
    echo ""
    echo "Either 1'st, 2'nd or both parameters were missing"
    echo ""
    echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ch-mount -m /media/sdcard/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi

编辑完成退出,使用以下指令增加可运行权限

chmod a+x ch-mount.sh

9.挂载Ubuntu-base系统

运行以下指令

./ch-mount.sh -m rootfs

运行成功会提示MOUNTING,并进入root@主机名,如下图

10.更新ubuntu-base软件

在更新前一定要先修改/tmp目录权限否则更新会出现异常,指令如下

chmod 777 /tmp 
chmod 777 /dev/null
apt update
apt upgrade

11.安装一些基础包

可以加一些你自己常用的包,此处安装以下内容

apt-get install -y language-pack-en-base sudo ssh net-tools \
network-manager iputils-ping rsyslog bash-completion htop resolvconf \
dialog vim udhcpc udhcpd git v4l-utils alsa-utils git gcc less \
autoconf autopoint libtool bison flex gtk-doc-tools libglib2.0-dev \
libpango1.0-dev libatk1.0-dev kmod pciutils libjpeg-dev \
ifupdown ethtool rsync udev nfs-common psmisc 

12.配置网络相关设定

修改网络配置加入两个网卡和无线网卡

vim /etc/network/interfaces

输入以下内容

# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp 
source-directory /etc/network/interfaces.d

编辑DNS相关配置文件/etc/resolv.conf和/etc/systemd/resolved.conf

vim /etc/resolv.conf	

修改或添加以下内容

nameserver 8.8.8.8
nameserver 114.114.114.114

编辑/etc/systemd/resolved.conf

vim /etc/systemd/resolved.conf

将DNS修改如下

[Resolve]
DNS=8.8.8.8 114.114.114.114

设置主机名称

echo "OKMX8MPQ-C"  >  /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 OKMX8MPQ-C" >> /etc/hosts

修改开机等待网络等待5分钟设定

vim /etc/systemd/system/network-online.target.wants/networking.service

将里面的TimeoutStartSec=5min 修改为TimeoutStartSec=2sec

13.配置串口

使用以下指令配置串口

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

14.修改root用户密码及添加新用户

修改root用户密码

passwd root

添加新用户并设置密码

#新增用户
useradd -s '/bin/bash' -m -G adm,sudo yourusername 

#设置新用户密码
passwd yourusername

 修改sudo权限

chmod u+w /etc/sudoers
vim /etc/sudoers

 然后在root的下一行添加新的用户

root    ALL=(ALL:ALL) ALL
yourusername    ALL=(ALL:ALL) ALL

 启用ssh的root帐号登录

vi /etc/ssh/sshd_config

添加以下内容

PermitRootLogin yes

15.修改系统重启默认等待时间

vim /etc/systemd/system.conf

找到这几行:

#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultTRestartSec=100ms

解除注释并将DefaultTimeoutStopSec=90s修改为:

DefaultTimeoutStartSec=90s
DefaultTimeoutStopSec=1s
DefaultTRestartSec=100ms

16.解除ubuntu base文件系统挂载

退出挂载环境

exit

卸载ubuntu base文件系统

./ch-mount.sh -u rootfs

退出成功提示UMOUNTING返回原系统目录,如下图

17.重新打包文件系统

重新打包ok8mp-linux-fs.sdcard

cd ..

sudo chown -R soon:soon OK8MP-linux-fs/rootfs
. environment-setup-aarch64-poky-linux

./build.sh mkfw

耐心等待执行成功如下图

 打包成功在~/forlinx/OK8MP-linux-sdk/images目录下会生成新的ok8mp-linux-fs.sdcard

注如果不修改owner会出现以下权限异常提醒

 18.烧录新的文件系统

将编译生成的ok8mp-linux-fs.sdcard拷贝到windows下,并使用uuu烧录到开发板,从串口就能进入ubuntu了,如下图:

以上本次移植分享,目前GPU部分没有适配成功,后续如有适配成果在做分享,感谢阅读。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值