基于WSL和玄铁官方仓库c-sky/buildroot构建玄铁CPU系统镜像

文摘   2024-08-08 17:43   湖南  

一. 前言

本文分享基于WSL,玄铁官方仓库c-sky/buildroot,构建玄铁CPU系统镜像的过程。这里使用WSL而不是使用vmware等虚拟机或者是linux主机。毕竟windows还是开发主力,WSL可以和windows无缝使用,且比安装vmware等虚拟机更简单,资源需求更低,一些性能不强的电脑往往使用vmware会很卡,使用WSL的话基本也没问题。

二. WSL环境准备

参考https://learn.microsoft.com/zh-cn/windows/wsl/install-manual

我这里使用的系统是Windows 11 专业版22631.3958

2.1安装WSL使能虚拟机

点击桌面左下角windows图标,搜索栏输入powershell,找到WindowsPowerShell,右键点击,以管理员身份运行弹出用户账户控制对话框,点击是。

然后输入以下命令回车

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

继续输入以下命令回车

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

2.2安装WSL2

从以下地址下载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

2.3安装发行版

参考如下链接安装linux发行版

我这里下载Ubuntu22.04 LTS

https://aka.ms/wslubuntu2204

下载得到Ubuntu2204-221101.AppxBundle

D盘新建WSL文件夹,把该文件复制过去。

右键点击该文件,用压缩文件打开,解压到当前目录

继续解压Ubuntu_2204.1.7.0_x64.appx

得到如下文件

双击ubuntu.exe开始安装,会自动在此创建虚拟盘ext4.vhdx, 相当于系统就安装在了这个位置。

按提示输入用户名和密码,完成安装

2.4更新系统

sudo apt update

sudo apt upgrade

2.5运行GUI应用

sudo apt install x11-apps -y

输入xclock可以看到图形应用运行也OK

2.6 安装终端

为了方便打开多终端,可以安装终端应用

https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=zh-cn&gl=CN

下载后双击Windows Terminal Installer.exe安装

再打开终端即可打开多界面

一. 玄铁buildroot构建系统

参考https://github.com/c-sky/buildroot

3.1 下载源码

git clone https://github.com/c-sky/buildroot.gitcd buildroot

3.2 构建

3.2.1 安装依赖库

需要先安装make工具,gcc工具和其他一些库

sudo apt install make sudo apt install gccsudo apt install unzipsudo apt install bcsudo apt install bzip2sudo 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 下也是配置文件。

3.2.2错误处理

c-stack.cSIGSTKSZ错误

如果报错如下

from c-stack.c:49:c-stack.c:55:26: error: missing binary operator before token "("   55 | #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384

先查找文件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
#ifndef SIGSTKSZ# define SIGSTKSZ 16384#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#endif

改为

#ifndef SIGSTKSZ# define SIGSTKSZ 16384//#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#endif

ctrl+o保存,ctrl+x退出。

libfakeroot.c_STAT_VER报错

报以下错误

                 from libfakeroot.c:60:libfakeroot.c: In functionstatx’:libfakeroot.c:102:50: error: ‘_STAT_VERundeclared (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

添加以下内容

#ifndef _STAT_VER #if defined (__aarch64__)  #define _STAT_VER 0 #elif defined (__x86_64__)  #define _STAT_VER 1 #else  #define _STAT_VER 3 #endif#endif

/usr/bin/env: ‘python’: No such file or directory

安装的是python3,所以手动添加软链接。

sudo ln -s /usr/bin/python3 /usr/bin/python


can't create node

打印如下

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=headsfakeroot.hashfakeroot.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/package/fakeroot/0001-skip-doc-subdirs.patch

重新编译。

3.3.3 构建输出

根据构建的组建的多少和电脑性能以及网速,需要的时间不一样的,我这里花了大几个小时才完成。

构建好的文件位于

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  uImageboot.ext4  fw_dynamic.elf  fw_jump.elf  linux-custom.patch.xz  readme_advanced.txt  rootfs.cpio.gz  rootfs.tar

3.3 Qemu运行

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

以下库需要安装

安装libbrlapi

安装

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/libbrlapi.so.0.6

安装libvdeplug

sudo apt install libvdeplug-dev

安装libaio

sudo apt install libaio-dev

安装libpixman

sudo apt-get -y install libpixman-1-dev

安装libbluetooth

sudo apt-get -y install libbluetooth-dev

安装 libpng12

sudo add-apt-repository ppa:linuxuprising/libpng12sudo apt updatesudo apt install libpng12-0

安装libsnappy

sudo apt install -y libsnappy-dev

安装libnettle

wget https://ftp.gnu.org/gnu/nettle/nettle-3.2.tar.gztar -xvf nettle-3.2.tar.gzcd nettle-3.2/sudo apt-get install m4./configure && make -j 4sudo 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运行时一些依赖库的安装。后续开始移植到具体的开发板的工作。
















嵌入式Lee
嵌入式软硬件技术:RTOS,GUI,FS,协议栈,ARM,总线,嵌入式C,开发环境 and blablaba....多年经验分享,非硬货不发,带你扒开每一个技术背后的根本原理。
 最新文章