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

参考:
https://blog.csdn.net/u013806814/article/details/51927270?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-2.vipsorttest&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-2.vipsorttest

可以直接在安装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显示问题等

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐