AM5728-移植ARM Ubuntu 20.04根文件系统
1. 获得ubuntu基本裸系统有两种方式获取Ubuntu基本裸文件系统,一种是从Ubuntu官网直接下载裸文件系统压缩包,另一种是利用debootstrap工具下载裸文件系统。1.1从ubuntu官网下载在 windows 系统网页中下载http://cdimage.ubuntu.com/ubuntu-base/releases/选择20.04版本:选择版本:ubuntu-base-20.04.
1. 获得ubuntu基本裸系统
有两种方式获取Ubuntu基本裸文件系统,一种是从Ubuntu官网直接下载裸文件系统压缩包,另一种是利用debootstrap工具下载裸文件系统。
1.1 从ubuntu官网下载
在 windows 系统网页中下载
http://cdimage.ubuntu.com/ubuntu-base/releases/
选择20.04版本:
选择版本:ubuntu-base-20.04.1-base-armhf.tar.gz
将此版本压缩包拷贝至虚拟机中,我使用的虚拟机如下:
TI-AM5728 虚拟机
也可以通过wget命令直接在虚拟机中下载压缩包:
wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.1-base-armhf.tar.gz
1.2 利用debootstrap工具
参考ubuntu提供的网站:
https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap
由于要跨平台运行,所以不能简单地进行本机编译,在网上查询专门有一个模拟不同机器架构的软件qemu,而在ubuntu中对其支持良好。所以首先在PC主机ubuntu系统中安装qemu模拟器:
sudo apt-get install qemu-user-static
然后就可以利用下面的命令获得一个基本的ubuntu裸文件系统:
sudo qemu-debootstrap --arch armhf --variant=minbase --verbose trusty ./
生成的minbase文件系统大小为123M。
manqemu-debootstrap可以看到其原理:
The qemu-debootstrap wrapper calls debootstrap(8) making use of the --foreign and --second-stage options, and copies the appropriate qemu-user-static(1) binary into place inorder to install cross-architecture chroots. In order for it to work seamlessly, the binfmt-support package must be installed.
也就是qemu-debootstrap调用debootstrap函数,并且把qemu-user-static的二进制文件qemu-arm-static复制到目标目录中以用于跨平台编译。qemu-debootstrap的参数选项和debootstrap相同,具体的可以查看debootstrap的用法。
(利用debootstrap工具下载速度太慢了,建议在Ubuntu官网下载,然后解压自行操作)
2. 解压基本裸系统
解压Ubuntu Core rootfs tar包,注意一定要用sudo:
$ mkdir linux-rootfs
$ sudo tar –zxvf ubuntu-base-20.04.1-base-armhf.tar.gz –C linux-rootfs
退回到上一级目录:
由于我们要chroot(改变程序执行时所参考的根目录位置),所以需要能够在chroot环境执行armhf版本的binary,所以我们要接触linux的binfmt机制和qemu static解释器
在电脑的 ubuntu 系统中安装模拟器并拷贝到根文件系统:
$ sudo apt-get install qemu-user-static
$ sudo cp /usr/bin/qemu-arm-static linux-rootfs/usr/bin/
3. 拷贝本地dns文件到根文件系统
先将本机的dns配置复制到目标rootfs,后面联网时会用到:
$ sudo cp -b /etc/resolv.conf linux-rootfs/etc/resolv.conf
4. 修改根文件系统中安装包源
打开根文件系统中的 linux-rootfs/etc/apt/sources.list,将其中的源换成中科大的镜像服务器:
一个速度相当不错的国内源:http://mirrors.ustc.edu.cn/ubuntu-ports/中科大的镜像服务器,换成这个会更好。
原来的源文件:
执行以下命令进行替换:
vi sources.list
:%s/ports.ubuntu.com/ mirrors.ustc.edu.cn/g
:wq
5. 下载文件系统挂载脚本,解压并赋可执行权限
链接:https://pan.baidu.com/s/1R3BpXwOdDd3ws6qCP8nz8w
提取码:ct1i
挂载proc, sys, dev, dev/pts等文件系统,我们可以编写一个bash脚本ch-mount.sh来完成挂载和后面的卸载操作,下载ch-mount.sh至当前目录,执行如下操作:
$ ./ch-mount.sh -m linux-rootfs
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 bothparameters were missing"
echo ""
echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m/media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
实际效果:
挂载文件系统后,模拟器生效,可以在模拟的系统中执行Linux相关操作。
6. 更新根文件系统
在模拟器中执行更新操作:
# apt-get update
# apt-get upgrade
7. 安装自己需要的工具包
# apt-get install vim git openssh-server sudo net-tools iputils-ping wireless-tools udev
# apt-get install htop rsyslog network-manager ifupdown ethtool
# apt-get install florence // 虚拟键盘,无触摸屏的建议安装
# apt-get install udhcpc udhcpd lrzsz //安装一些常用的网络工具和其他工具
(如果不要界面登陆,接下来的几步可以不用操作)
安装登录界面、显示界面,这一步特别耗时间
# apt-get install ubuntu-session xubuntu-desktop
选择启动界面
# update-alternatives --config x-session-manager
配置默认登录界面
# dpkg-reconfigure lightdm
8. 配置网络
可以将平时使用的interfaces文件替换根文件系统的文件。
也可以自己手动添加:
# echo auto eth0 > etc/network/interfaces.d/eth0
# echo iface eth0 inet dhcp >> etc/network/interfaces.d/eth0
# echo auto wlan0 > etc/network/interfaces.d/wlan0
# echo allow-hotplug wlan0 > etc/network/interfaces.d/wlan0
# echo iface wlan0 inet dhcp >> etc/network/interfaces.d/wlan0
9. 设置用户相关
root用户一定要先配置密码:
passwd root
设置好自己的密码。
添加其他的用户:
adduser heat,然后根据提示设置密码。
设置主机名称:
echo"ubuntu-arm" > /etc/hostname
设置本机入口ip:
echo"127.0.0.1 localhost" >> /etc/hosts
echo"127.0.0.1 ubuntu-arm" >> /etc/hosts
10. 退出脚本
在根文件系统中添加自己需要的操作后,可以使用exit命令退出模拟器。
11. 退出挂载根文件系统
$ ./ch-mount.sh -u linux-rootfs
查看制作的根文件系统大小:440M左右
sudo du -s -h linux-rootfs/
12. 将制作的根文件系统用于AM5728烧写
至此,基于Ubuntu的根文件系统已经制作完成。可以参考创龙制作SD系统卡的用户手册进行操作。将制作后的SD卡放入到广州创龙AM5728 Demo板上运行。
1) 进入根文件系统,执行压缩命令,将根文件系统压缩
Warning:如果压缩时,出现卡在 /proc/kcore 的时候,先中断,然后返回根目录,执行“./ch-mount.sh -u linux-rootfs/”将模拟器的文件系统卸载,因为没有卸载时,/proc文件夹下有好多进程文件,而且kcore文件作为虚拟内存文件,会很大,影响根文件系统压缩!!!!!
2) 拷贝生成的压缩包至镜像制作目录下,原来的压缩包备份了一下
3) 执行SD卡制作脚本
4) 将制作后的SD卡放入到广州创龙AM5728 Demo板上运行
系统启动后的效果:
13. 烧写后系统运行遇到的相关问题
13.1 SSH登陆问题
系统启动后使用xShellSSH登陆时,老是提示密码错误。需要修改SSH的配置文件:
(参考:https://blog.csdn.net/javahighness/article/details/78926565)
13.2 Ubuntu系统运行Python
制作的文件系统中并没有python解释器,可以通过apt-get install进行安装。
我们这里安装最新的python版本:3.8.5
python安装后,可以直接运行编译器;
也可以编写Python脚本运行:
test.py 脚本,加上执行权限后,./test.py执行。
Python库的安装:
参考:https://blog.csdn.net/yato0514/article/details/78754551
通过apt-get install 命令进行安装。不建议使用pip安装,会报错。
注意:我们使用的是python3,安装包时要注意。
$ sudo apt-get install python3-numpy
使用”pip3 list”命令查看系统已安装的Package。
13.3 Ubuntu系统运行Java
可以直接在安装ARM Ubuntu的开发板中直接操作。
1. 安装JAVA环境
1)安装之前进行apt-get的更新【好习惯哈~】
2)搜索apt-get软件源中的jdk
3)执行 sudo apt-get install default-jdk -y ,安装成功后的结果
4)查看Java版本号、以及安装后的java可执行文件
2. 写一个JAVA测试程序
创建文件夹,在文件夹下创建一个名为 helloworld.java 的测试文件。测试代码如下:
public class helloworld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
然后通过javac编译生成helloworld.class文件。使用java运行此编译文件:
13.4 其他问题
1)bash 不能使用
2)修改 /etc/profile
解决vi显示不全问题,ll显示问题等
更多推荐
所有评论(0)