当前位置:首页 > 技术 > LINUX > 正文内容

从零开始构建 RISC-V 架构下的 Debian 根文件镜像

Watrt3年前 (2023-10-24)LINUX22030

主机配置:Ubuntu 18.04

配置基本服务

下载安装依赖

sudo apt install debootstrap qemu qemu-user-static qemu-system qemu-utils qemu-system-misc binfmt-support dpkg-cross debian-ports-archive-keyring --no-install-recommends

生成目标镜像,配置环境

dd if=/dev/zero of=rootfs.img bs=1M count=4096
mkdir rootfs
mkfs.ext4 rootfs.img
sudo mount rootfs.img rootfs

执行下debootstrap

sudo debootstrap --arch=riscv64 --foreign --keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring sid ./rootfs http://deb.debian.org/debian-ports

如果遇到GPG error: E852514F5DF312F6,需要更新下本地钥匙串。

wget http://ftp.cn.debian.org/debian/pool/main/d/debian-ports-archive-keyring/debian-ports-archive-keyring_2022.02.15_all.deb
sudo dpkg -i debian-ports-archive-keyring_2022.02.15_all.deb

基本文件系统就准备好了

编译安装最新版的QEMU

安装依赖。

sudo apt-get install -y pkg-config git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev

下载,配置QEMU并编译

wget https://download.qemu.org/qemu-7.0.0.tar.xz
tar -xf qemu-7.0.0.tar.xz
cd qemu-7.0.0/
./configure --static --target-list=riscv64-linux-user
make

将QEMU打包成 DEB 并安装

sudo apt-get install checkinstall
sudo checkinstall make install
sudo apt-get install ./*.deb

或直接安装

sudo make install

配置binfmt

/usr/bin/qemu-riscv64-static必须能够在chroot的目的地执行。 已准备好binfmt,riscv64可以运行。

先复制一份

将qemu-riscv64-static放在./riscv/usr/bin/QEMU-riscv 64-static上,如果是为了这次的目的,请使用/usr/bin/qemu-riscv64-static 只要在chroot的前端存在/usr/bin/qemu-riscv64-static二进制文件即可。

sudo cp -rf /usr/bin/qemu-riscv64-static rootfs/usr/bin/

配置binfmt的magic和mask

cat > /tmp/riscv64 <<- EOF
package qemu-user-static
type magic
offset 0
magic \x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xf3\x00
mask \xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff
interpreter /usr/bin/qemu-riscv64-static
EOF

导入binfmt

sudo update-binfmts --import /tmp/riscv64

检查一下有没有配置成功

ls /proc/sys/fs/binfmt_misc/riscv64
-> /proc/sys/fs/binfmt_misc/riscv64

(如果没有输出,sudo systemctl restart binfmt-support 一下)

进入chroot环境

sudo chroot rootfs/

配置目标rootfs

先让debootstrap把事情干完。

/debootstrap/debootstrap --second-stage

再配置下软件源

cat >/etc/apt/sources.list <<EOF
deb http://ftp.ports.debian.org/debian-ports sid main
deb http://ftp.ports.debian.org/debian-ports unstable main
deb http://ftp.ports.debian.org/debian-ports unreleased main
deb http://ftp.ports.debian.org/debian-ports experimental main
EOF

安装软件包

apt-get update
apt-get install -y util-linux haveged openssh-server systemd kmod initramfs-tools conntrack ebtables ethtool iproute2 iptables mount socat ifupdown iputils-ping vim neofetch sudo chrony pciutils

配置网络

mkdir -p /etc/network
cat >/etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
cat >/etc/resolv.conf <<EOF
nameserver 1.1.1.1
nameserver 8.8.8.8
EOF

配置分区

cat >/etc/fstab <<EOF
LABEL=rootfs/ext4user_xattr,errors=remount-ro01
EOF

配置root密码

echo "root:riscv" | chpasswd

清理缓存

apt-get clean
rm -rf /var/cache/apt/

退出chroot,解除挂载

exit
sudo umount rootfs

输出得到的rootfs.img就是目标根文件。


打赏 支付宝打赏 微信打赏

相关文章

荔枝派Nano 全流程指南

荔枝派Nano 全流程指南

u-boot 初体验安装交叉编译链首先需要安装交叉编译链:# 此处为获取7.2.1版本,您可获取其他版本或者通过链接直接下载 wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz tar -vxJf gcc-li...

Linux没有最小只有更小----迷你Linux版本大集合

Linux没有最小只有更小----迷你Linux版本大集合

    自从去年到现在已经收集了上百种版本的Linux和Unix,至于Unix就不想说了,没有Linux的功底是很难驾驭Unix的,我在这里只把小于360M的Linux以及一些非Linux但是很像Linux的版本也发布一下,我本人喜欢安静,如果你想要这些迷你版本的Linux光盘的话,建议去官网下载就OK了。英语不行的话随时带个字典。有些没有桌面,想知道哪些没有桌面的话请自己网上查资料!下面就是绝大部分小于361M的Linux及其非Linux名单,参考时间为...

利用BusyBox ~私人定制 My LINUX~

利用BusyBox ~私人定制 My LINUX~

前言  我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如、用户能够远程登录;和Nginx能够稳定地运行在我们私人定制的LINUX系统上、一步一步从头开始定制属于我们自己的系统。正文   首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素.   一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装Dropbear和Nginx,Linux的组成 部分包括内核空间和用户空间、而...

 Debian 9.9 (stretch) 文件系统制作

Debian 9.9 (stretch) 文件系统制作

0. 准备工作:sudo apt install qemu-user-static -y sudo apt install debootstrap -y mkdir rootfs1. debootstrapdebootstrap --foreign --verbose --arch=armhf  stretch rootfs http...

修改U-BOOT,输出信息在LCD上显示,并使用USB连接键盘使用控制台

修改U-BOOT,输出信息在LCD上显示,并使用USB连接键盘使用控制台

修改方法:一:修改U-BOOT   include/configs/suniv.h#define CONFIG_BOOTCOMMAND"fatload mmc 0:1 0x80800000 zImage; "  \              &nb...

控制台终端输出颜色

控制台终端输出颜色

在使用putty、secureCRT、XShell等终端仿真器连接linux系统时,ls、vim等工具的输出都含有各种颜色,这些颜色的输出大大地增强了文本的可读性。一、终端文本颜色输出的一般示例在bash中,通常我们可以使用echo命令加-e选项输出各种颜色的文本,例如:echo -e "\033[31mRed Text\033[0m" echo -e "\033[32mGreen Text\033[0m...

荔枝派Nano的linux5.2版本主线下载及编译(支持USB设备与主机模式)

荔枝派Nano的linux5.2版本主线下载及编译(支持USB设备与主机模式)

安装必须的库:sudo apt-get install gcc make cmake rsync wget unzip build-essential git bc swig libncurses-dev libpython3-dev libssl-dev python3-distutils android-tools-mkbo...

从Ubuntu-base构建ubuntu rootfs系统

从Ubuntu-base构建ubuntu rootfs系统

1.介绍ubuntu-base 是Ubuntu官方构建的ubuntu最小文件系统,包含debain软件包管理器,基础包大小通常只有几十兆,其背后有整个ubuntu软件源支持,ubuntu软件一般稳定性比较好,基于ubuntu-base按需安装Linux软件,深度可定制…,常用于嵌入式rootfs构建。嵌入式常见的几种文件系统构建方法:busybox、yocto、builroot,我觉得它们都不如Ubuntu方便,强大的包管系统,有强大的社区支持,可以直接apt-get install来安装新软件...