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

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

Watrt1年前 (2023-10-24)LINUX6960

主机配置: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就是目标根文件。


分享给朋友:

相关文章

基于 debootstrap 和 busybox 构建 mini ubuntu

基于 debootstrap 和 busybox 构建 mini ubuntu

最近的工作涉及到服务器自动安装和网络部署操作系统,然后使用 ansible 和 saltsatck 进行配置并安装 openstack 。难点在于服务器的自动安装,由于不单只是通过 PXE 安装服务器,还需要能够安装时进行分区、配置网卡等工作,因此需要在开始安装前,必须先收集服务器的硬件信息。调研了一下目前的开源项目中,提供此类功能的有 tinycorelinux 、 puppet razor-el-mk 可做类似的工作。tinycorelinux 是个很好的工具,整个系统在 PXE 之后在内存...

使用buildroot构建根文件系统

使用buildroot构建根文件系统

使用buildroot构建根文件系统buildroot可用于构建小型的linux根文件系统。大小最小可低至2M,与内核一起可以放入最小8M的spi flash中。buildroot中可以方便地加入第三方软件包(其实已经内置了很多),省去了手工交叉编译的烦恼。下载安装首先安装一些依赖,比如linux头文件:apt-get install linux-headers-$(uname -r)然后下载安装:wget https://buildroot.org/do...

荔枝派nano(f1c100s)的SPI-Flash系统编译创建全过程

荔枝派nano(f1c100s)的SPI-Flash系统编译创建全过程

前言本文的目标是创建一个运行在SPI-Flash上的精简系统,附带填一些前人没有提及的坑。在开始之前,请先通读官方教程的即食部分(U-Boot)、Linux编译和SPI-Flash系统的创建部分的教程,并搭建好编译工具链。以下我假设你已经按照上面的教程下载好了U-Boot和Linux内核,并且到Buildroot的官网下载好了Buildroot(但没按教程创建config文件)。SPI-Flash的分区结构以下是我这里的分区结构。你可以自由的分配后面两个分区的大小。ID  S...

Deepin Linux修复grub引导

Deepin Linux修复grub引导

环境说明:一直使用的是Win7+Deepin 15.5。后来全新安装了Win 10,需要修复grub第一步:在Windows操作系统下使用深度官方的U盘启动制作器 制作U盘第二步:开机U盘启动进入Deepin linux安装界面,待进入到安装界面选择语言时,按住Crtl+Alt+F2/F1进入Linux tty终端。并执行以下命令完成修复sudo fdisk -l/*根据查询结果确定deepin 的/目录和/boot目录所在的分区编号*/sudo mount&nbs...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。