本文分享基于WSL,玄铁官方仓库c-sky/buildroot,构建玄铁CPU系统镜像的过程。这里使用WSL而不是使用vmware等虚拟机或者是linux主机。毕竟windows还是开发主力,WSL可以和windows无缝使用,且比安装vmware等虚拟机更简单,资源需求更低,一些性能不强的电脑往往使用vmware会很卡,使用WSL的话基本也没问题。
参考https://learn.microsoft.com/zh-cn/windows/wsl/install-manual。
我这里使用的系统是Windows 11 专业版22631.3958。
点击桌面左下角windows图标,搜索栏输入powershell,找到WindowsPowerShell,右键点击,以管理员身份运行,弹出用户账户控制对话框,点击是。
然后输入以下命令回车:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
继续输入以下命令回车
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
从以下地址下载WSL2安装包
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
双击打开wsl_update_x64.msi开始安装。
点击下Next
弹出用户账户控制对话框点击是
安装完,点击Finish
Powershell中输入以下命令回车,设置默认使用WSL2
wsl --set-default-version 2
参考如下链接安装linux发行版
我这里下载Ubuntu22.04 LTS
https://aka.ms/wslubuntu2204
下载得到Ubuntu2204-221101.AppxBundle
在D盘新建WSL文件夹,把该文件复制过去。
右键点击该文件,用压缩文件打开,解压到当前目录
继续解压Ubuntu_2204.1.7.0_x64.appx
得到如下文件
双击ubuntu.exe开始安装,会自动在此创建虚拟盘ext4.vhdx, 相当于系统就安装在了这个位置。
按提示输入用户名和密码,完成安装
sudo apt update
sudo apt upgrade
sudo apt install x11-apps -y
输入xclock可以看到图形应用运行也OK
为了方便打开多终端,可以安装终端应用
https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=zh-cn&gl=CN
下载后双击Windows Terminal Installer.exe安装
再打开终端即可打开多界面
参考https://github.com/c-sky/buildroot
git clone https://github.com/c-sky/buildroot.git
cd buildroot
需要先安装make工具,gcc工具和其他一些库
sudo apt install make
sudo apt install gcc
sudo apt install unzip
sudo apt install bc
sudo apt install bzip2
sudo apt install build-essential
然后
make CONF=thead_9xxf_enhanced_5.10_glibc_br_defconfig
其中thead_9xxf_enhanced_5.10_glibc_br_defconfig位于configs_enhanced下,configs 下也是配置文件。
如果报错如下
from c-stack.c:49:
c-stack.c:55:26: error: missing binary operator before token "("
55 |
先查找文件c-stack.c的位置
find . -name c-stack.c
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/host-m4-1.4.18/lib/c-stack.c
然后修改该文件
nano ./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/host-m4-1.4.18/lib/c-stack.c
/* libsigsegv 2.6 through 2.8 have a bug where some architectures use
more than the Linux default of an 8k alternate stack when deciding
if a fault was caused by stack overflow. */
改为
//#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
/* libsigsegv 2.6 through 2.8 have a bug where some architectures use
more than the Linux default of an 8k alternate stack when deciding
if a fault was caused by stack overflow. */
//# undef SIGSTKSZ
//# define SIGSTKSZ 16384
ctrl+o保存,ctrl+x退出。
报以下错误
from libfakeroot.c:60:
libfakeroot.c: In function ‘statx’:
libfakeroot.c:102:50: error: ‘_STAT_VER’ undeclared (first use in this function)
102 | #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT64(_STAT_VER,a,b,c,d)
先查找该文件位置
find . -name libfakeroot.c
qinyunti@LAPTOP-2SG60VPF:~/buildroot$ find . -name libfakeroot.c
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/host-fakeroot-1.25.3/libfakeroot.c
修改该文件
nano ./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/host-fakeroot-1.25.3/libfakeroot.c
添加以下内容
安装的是python3,所以手动添加软链接。
sudo ln -s /usr/bin/python3 /usr/bin/python
打印如下
makedevs: line 22: can't create node /home/qinyunti/buildroot/thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/buildroot-fs/cpio/target/dev/null: Operation not permitted
下载最新的文件https://gitlab.com/buildroot.org/buildroot/-/tree/master/package/fakeroot?ref_type=heads,fakeroot.hash与fakeroot.mk。
查找fakeroot目录
find -name fakeroot
./dl/fakeroot
./buildroot-9d1d4818c39d97ad7a1cdf6e075b9acae6dfff71/package/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/host-fakeroot-1.25.3/scripts/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/buildroot-config/br2/rootfs/post/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/buildroot-fs/cpio/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/host/bin/fakeroot
将下载的新文件替换./buildroot-9d1d4818c39d97ad7a1cdf6e075b9acae6dfff71/package/fakeroot下的文件
删除
./dl/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/host-fakeroot-1.25.3/scripts/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/buildroot-config/br2/rootfs/post/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/build/buildroot-fs/cpio/fakeroot
./thead_9xxf_enhanced_5.10_glibc_br_defconfig/host/bin/fakeroot
/home/qinyunti/buildroot/buildroot-9d1d4818c39d97ad7a1cdf6e075b9acae6dfff71/pac
kage/fakeroot/0001-skip-doc-subdirs.patch
重新编译。
根据构建的组建的多少和电脑性能以及网速,需要的时间不一样的,我这里花了大几个小时才完成。
构建好的文件位于
thead_9xxf_enhanced_5.10_glibc_br_defconfig/images/
ls thead_9xxf_enhanced_5.10_glibc_br_defconfig/images/
Image fw_dynamic.bin fw_jump.bin hw readme.txt rootfs.cpio rootfs.ext2 uImage
fw_dynamic.elf fw_jump.elf linux-custom.patch.xz readme_advanced.txt rootfs.cpio.gz rootfs.tar
Qemu相关工具位于thead_9xxf_enhanced_5.10_glibc_br_defconfig/host/csky-qemu/
先检查依赖库
ldd thead_9xxf_enhanced_5.10_glibc_br_defconfig/host/csky-qemu/bin/qemu-system-riscv64
以下库需要安装
安装
sudo apt install libbrlapi-dev
查找安装的位置
find /usr/lib -name "libbrlapi*"
看到是0.8版本
/usr/lib/x86_64-linux-gnu/libbrlapi.so.0.8
/usr/lib/x86_64-linux-gnu/libbrlapi.so
/usr/lib/x86_64-linux-gnu/libbrlapi.so.0.8.3
/usr/lib/x86_64-linux-gnu/libbrlapi.a
直接创建一个0.6版本的软链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libbrlapi.so.0.8 /usr/lib/x86_64-linux-gnu/li
bbrlapi.so.0.6
sudo apt install libvdeplug-dev
sudo apt install libaio-dev
sudo apt-get -y install libpixman-1-dev
sudo apt-get -y install libbluetooth-dev
sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0
sudo apt install -y libsnappy-dev
wget https://ftp.gnu.org/gnu/nettle/nettle-3.2.tar.gz
tar -xvf nettle-3.2.tar.gz
cd nettle-3.2/
sudo apt-get install m4
&& make -j 4
sudo make install
安装到了/usr/local/lib64/下。
创建软连接
sudo ln -s /usr/local/lib64/libnettle.so.6 /lib/libnettle.so.6
cd thead_9xxf_enhanced_5.10_glibc_br_defconfig/
./host/csky-qemu/bin/qemu-system-riscv64 -M virt -cpu c910 -kernel ./images/fw_jump.bin -device loader,file=./images/Image,addr=0x80200000 -append "rootwait root=/dev/vda ro" -drive file=./images/rootfs.ext2,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -nographic -smp 1 -bios ./images/fw_jump.bin
启动如下,输入root登录
本文分享了基于WSL,玄铁buildroot官方仓库,构建玄铁CPU系统镜像的过程。使用WSL比较方便,替代了安装庞大的虚拟机。主要先体验下构建过程,记录下构建过程中的问题处理,qemu运行时一些依赖库的安装。后续开始移植到具体的开发板的工作。