您当前的位置: 首页 >  ubuntu

韦东山

暂无认证

  • 2浏览

    0关注

    506博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

从零构建一个riscv64 ubuntu-20发行版系统

韦东山 发布时间:2021-07-13 17:15:08 ,浏览量:2

文章目录
  • 1.搭建开发环境
    • 1.1 开发涉及的环境/工具:
  • 1.2 安装qemu虚拟化工具
    • 1.2.1 apt安装
    • 1.2.2 手动交叉编译安装
  • 2. 获取riscv架构ubuntu根文件系统
  • 3.Vmware ubuntu挂载riscv架构ubuntu文件系统
    • 3.1. 解压缩riscv架构ubuntu文件系统到ubuntu下
    • 3.1.2 拷贝qemu模拟工具到riscv64架构ubuntu-rootfs文件系统下
    • 3.1.2 chroot到模拟riscv64文件系统下
  • 4. 配置riscv架构的ubuntu系统
    • 4.1 安装基础软件包
    • 4.2 用户名密码等相关设置
    • 4.3 其它配置
    • 4.4 退出riscv模拟文件系统
    • 4.5 配置系统内核模块以及固件
    • 4.6 使用nfs方式启动系统系统
  • 5. 制作可烧录的固件
    • 5.1 制作ext4文件系统镜像
    • 5.2 使用genimage制作可烧录镜像
    • 5.3 文件系统只读问题
  • 6. 启动后常见问题
    • 6.1 网络相关问题
  • 关于发行版文件系统的想法与建议
    • 统一一个可大家长期维护的发行版系统镜像
    • 使用github自动化工作流来自行构建生成系统镜像
  • 【附加内容】

1.搭建开发环境 1.1 开发涉及的环境/工具:
  • Windows下虚拟化工具VMware workstation pro。

  • vmware 下运行的ubuntu /debian 虚拟机系统。

  • riscv 架构的ubuntu根文件系统源码包。

  • ch-mount.sh挂载文件系统脚本。

1.2 安装qemu虚拟化工具 1.2.1 apt安装

Ubuntu终端下需要安装qemu虚拟化工具,在终端下执行如下命令。

book@100ask:~$ sudo apt-get install qemu-user-static

安装完成后,在文件系统下执行如下命令测试是否安装成功。

book@100ask:~$ qemu-riscv64-static -version

1.2.2 手动交叉编译安装
# see https://wiki.qemu.org/Hosts/Linux#Required_additional_packages
book@100ask:~$ sudo apt-get install -y pkg-config git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
book@100ask:~$ git clone https://git.qemu.org/git/qemu.git -b v4.2.0 --depth=1
book@100ask:~$ cd qemu && mkdir build && cd build
book@100ask:~$ mkdir out
# You have to build as a static binary.
book@100ask:~$ ../configure --static --target-list=riscv64-linux-user --prefix=$(pwd)/out
book@100ask:~$ make && make install
book@100ask:~$ cd ../../
2. 获取riscv架构ubuntu根文件系统

使用浏览器访问 http://cdimage.ubuntu.com/ubuntu-base/ 此地址,即可看到ubuntu基本系统所有的版本镜像文件,这里我们选择releases发布版。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JIzYY0MU-1626167188181)(images/clip_image006.jpg)]

​ 我们点击 release 发布版本的连接后进入如下图所示界面,这里列出了ubuntu base各个版本的下载地址,如下图根据红框所示,点击20.04 目前只有ubuntu 20支持了riscv64架构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FmTGEaQy-1626167188182)(images/image-20210707113608512.png)]

​ 点击20.04后在弹出新的页面内继续点击 releases 。

在这里插入图片描述

​ 之后页面就跳入ubuntu base 20.04 lts文件系统的下载页面了,这里列出了各种架构的文件系统源码包,不同的历史版本,我们页面往下滑,找到最新的架构为 riscv64的ubuntu系统源码包,如下图红框所示,下载 ubuntu-base-20.04.2-base-riscv64.tar.gz 到电脑磁盘上,让后上传此文件到VMware Ubuntu系统内。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsDeCBJr-1626167188186)(images/image-20210707113803529.png)]

3.Vmware ubuntu挂载riscv架构ubuntu文件系统 3.1. 解压缩riscv架构ubuntu文件系统到ubuntu下

在VMware Ubuntu虚拟机家目录下创建一个 ubuntu-rootfs目录,用于解压缩保存文件使用。

book@100ask:~$ mkdir ubuntu-rootfs

book@100ask:~$ sudo tar -xvf ubuntu-base-20.04.2-base-riscv64.tar.gzz -C ubuntu-rootfs/

查看当前路径下的文件结构已经OK

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NS48gwwY-1626167188187)(images/clip_image014.jpg)]

3.1.2 拷贝qemu模拟工具到riscv64架构ubuntu-rootfs文件系统下
book@100ask:~$ sudo cp usr/bin/qemu-riscv64-static ubuntu-rootfs/usr/bin/

注意:qemu-riscv64-static 指的是riscv64架构的虚拟化工具,果是其他架构的则拷贝其他文件。

如果你是手动编译生成的qemu-riscv64-static文件,则参考下述命令。

book@100ask:~$ sudo cp ./qemu/build/out/bin/qemu-riscv64 ./riscv/usr/bin/qemu-riscv64-static

ubuntu-roofs/usr/bin/ 指的是你当前解压riscv64架构的ubuntu20.04文件系统后的所在目录下的 usr/bin。

拷贝主机DNS配置文件到riscv架构Ubuntu文件系统内(必须拷贝,否则可能会导致下面操作无法进行)。

book@100ask:~$  sudo cp /etc/resolv.conf  ubuntu-rootfs/etc/resolv.conf
3.1.2 chroot到模拟riscv64文件系统下

我们需要使用chroot 改变根目录来挂载riscv架构的ubuntu根文件系统,并配置或安装一些必要资源,首先创建ch-mount.sh 脚本。

book@100ask:~$ vi ch-mount.sh

将以下的内容复制到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 chroot ${2}
}

function umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    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


考虑到shell脚本对空格很灵敏,所以将我使用的文件放在如下地址处。

book@100ask:~$ wget \
https://weidongshan.coding.net/p/DevelopmentEnvConf/d/DevelopmentEnvConf/git/raw/master/ubuntu_rootfs-mount/ch-mount.sh
book@100ask:~$ chmod +x ch-mount.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRSgfL08-1626167188187)(images/clip_image016.jpg)]

接下来我们使用ch-mount.sh脚本挂载riscv架构ubuntu文件系统,挂载命令如下所示,挂载成功后会提示 MOUNTING。

book@100ask:~$ sudo ./ch-mount.sh -m ubuntu-rootfs/

此时我们可以在此执行 uname -a来查看系统内核的详细信息,你会发现现在是 riscv架构。

在这里插入图片描述

4. 配置riscv架构的ubuntu系统 4.1 安装基础软件包

Chroot进入模拟的riscv架构Ubuntu系统后需要先安装如下必须的安装包,安装包安装过程会根据你的网络下载速率可能会需要一段时间。

安装基础软件包之前需要先执行 apt-get update命令来更新软件源,用以获取软件包的地址等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bbRRgyeq-1626167188188)(images/clip_image020.jpg)]

软件源更新完成后,可以安装必要软件包,安装速度根据个人网速绝定。

apt-get install \
language-pack-en-base sudo ssh  net-tools network-manager iputils-ping rsyslog \
bash-completion  language-pack-zh-hans vim resolvconf kmod usbutils alsa-base

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rpeZXFvf-1626167188189)(images/clip_image022.jpg)]

4.2 用户名密码等相关设置
  • 添加用户、设定合适的组并设置密密码

添加book用户并加入admin sudo用户组,设置密码为123456

root@100ask:/#  useradd -s '/bin/bash' -m -G adm,sudo book 
root@100ask:/#  echo "Set password for book:" 
root@100ask:/#  passwd book 

初始化root用户密码,这里设置为123456

root@100ask:/#  passwd root
4.3 其它配置
  • 设置主机名称和hosts

在模拟的riscv架构ubuntu根文件系统下执行如下两条命令即可设置主机名称。

root@100ask:/# echo 100ask > /etc/hostname
root@100ask:/# echo 100ask  > /etc/hosts
  • 配置登陆的启动串口脚本

因为暂时未安装桌面,所以这里的配置要具体和内核中登录的串口的设备对应起来,不然对导致无法通过串口登录的问题。

在 /etc/init/ 下添加或修改ttyS0.conf

root@100ask:/# cat > /etc/init/ttyS0.conf > /etc/network/interfaces             
关注
打赏
1658827356
查看更多评论
0.0393s