riscv交叉编译ports软件@FreeBSD15

当前FreeBSD的riscv版本下,软件包还很贫乏,再加上RISCV的板子有很多种,大部分时候都需要自己动手编译。但是在RISCV环境下编译太慢了,所以我们要使用交叉编译,在很快的AMD64服务器上交叉编译RISCV的软件包。

这里使用了poudriere和jail技术,让我们可以建立riscv的隔离的编译环境。

参考官方文档:riscv/ports - FreeBSD Wiki

poudriere的详细文档:Chapter 4. Installing Applications: Packages and Ports | FreeBSD Documentation Portal 

前期经验文档:使用poudriere安装jail基础的FreeBSD内核来编译软件包-CSDN博客 

 详细过程

首先安装qemu-user-static包并启动服务:

pkg install -y qemu-user-static
service qemu_user_static enable
service qemu_user_static start

生成一个新的poudriere jail容器

如果没有安装poudriere的话就先pkg安装

 pkg install poudriere

如果poundriere服务没有起来的话,手动启动服务:

service poudriered onestart

生成新的jail容器

sudo poudriere jail -c -a riscv.riscv64 -x -j 15rscv64 -m ftp -v 15.0-CURRENT -x

当然,因为FreeBSD15只能去官网,所以生成jail的速度受限于下载速度,需要一些时间。

显示输出:

sudo poudriere jail -c -a riscv.riscv64 -x -j 15riscv64 -m ftp -v 15.0-CURRENT -x
Password:
[00:00:01] Cross-building ports for riscv.riscv64 on amd64 requires QEMU
[00:00:01] Creating 15riscv64 fs at /usr/local/poudriere/jails/15riscv64... done
[00:00:03] FREEBSD_HOST from config invalid; defaulting to https://download.FreeBSD.org
[00:00:04] Fetching MANIFEST for FreeBSD 15.0-CURRENT riscv.riscv64
MANIFEST                                               783  B 1079 kBps    00s
[00:00:04] Fetching base for FreeBSD 15.0-CURRENT riscv.riscv64
base.txz                                               171 MB  456 kBps 06m25s
[00:06:34] Extracting base...

整个过程非常耗时,我怀疑它想把所有的ports都编译一遍?  是不是因为-x参数用了两次?  

更新jail 

poudriere jail -j 15riscv64 -u -x

英文文档附上:

Cross-Building Ports

There is some support for cross-compiling ports via poudriere(8) and qemu-user-static. This method works by emulating a RISC-V userspace with QEMU, so it is faster than building within an emulated system, but slower than building natively. The QEMU userspace emulation is imperfect.

Install and start qemu-user-static first:

pkg install -y qemu-user-static
service qemu_user_static enable
service qemu_user_static start

Please refer to the FreeBSD Handbook entry about poudriere if you are unfamiliar with the tool or need to set it up.

The following command will create a new poudriere jail set up to cross-compile ports for the riscv.riscv64 target:

$ poudriere jail -c -a riscv.riscv64 -x -j 14riscv64 -m ftp -v 14.0-CURRENT -x

The -x argument instructs poudriere(8) to build native cross-toolchain. Make sure to specify it when updating the jail as well, like so:

$ poudriere jail -j 14riscv64 -u -x

更高效交叉编译:只编译一部分ports

前面的例子我怀疑把内核和ports全编译了一遍,其实我们是不需要的,我们可以直接使用现成的FreeBSD内核,而且只编译需要的ports

先创建一个15.0-CURRENT riscv jail

执行命令:

poudriere jail -c -a riscv.riscv64 -j 15riscv64 -v 15.0-CURRENT

下载ports

poudriere ports -c -p local -m git+https

写代编译的ports列表

写一个config列表文件15riscv64 -local-workstation-pkglist,内容如下:

editors/emacs
devel/git
devel/php-composer2@php82
ports-mgmt/pkg

这里面的内容就是我们需要交叉编译的ports软件。可以根据需要添加修改删除。

执行配置和编译工作: 

poudriere options -j 15riscv64 -p local -z workstation -f 15riscv64-local-workstation-pkglist
poudriere bulk -j 15riscv64 -p local -z workstation -f 15riscv64-local-workstation-pkglist

 这样效率更高。

调试

poudriere创建jail报错

poudriere jail -c -a riscv.riscv64 -x -j 14riscv64 -m ftp -v 14.0-CURRENT -x
=>> Error: ZPOOL variable is not set 

原因是:

This error is caused by the fact, when the poudriere.conf configuration file is located in /usr/local/etc/poudriere.d/ (as it is allowed according to the manpage) with no oudriere.conf  in /usr/local/etc/.

The problem can temporarily solved by copying/moving the configuration file to /usr/local/etc/.

学着上面讲的 cp /usr/local/etc/poudriere.conf /usr/local/etc/poudriere.d/ ,还是没有解决。

最终看以前的文档,找到解决方案,就是在poudriere.conf文件里,去掉NO_ZFS=yes 的注释。

vi /usr/local/etc/poudriere.conf ,去掉NO_ZFS=yes 前面的井号。

另外一种方法就是在/usr/local/etc/poudriere.conf文件里加入ZPOOL的名字,比如很多都用默认名字:ZPOOL=zroot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/602059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Promise魔鬼面试题

文章目录 题目解析难点分析分析输出step1step2step3step4step5step6 参考/致谢:渡一袁老师 题目 Promise.resolve().then(() > {console.log(0);return Promise.resolve(4);}).then((res) > {console.log(res);});Promise.resolve().then(() > {console.l…

基于FPGA的数字信号处理(10)--定点数的舍入模式(1)四舍五入round

1、前言 将浮点数定量化为定点数时,有一个避不开的问题:某些小数是无法用有限个数的2进制数来表示的。比如: 0.5(D) 0.1(B) 0.1(D) 0.0001100110011001~~~~(B) 可以看到0.5是可以精准表示的,但是0.1却不行。原因是整数是离散的…

AngusTester安装请求代理

一、介绍 请求代理程序(AngusProxy)提供两个方面作用: 代理Http和WebSocket协议接口调试请求,解决浏览器跨域限制问题。对代理请求客户化处理支持,允许用户对代理请求进行二次处理,如:请求参数签名。 二、类型 为了…

【经验01】spark执行离线任务的一些坑

项目背景: 目前使用spark跑大体量的数据,效率还是挺高的,机器多,120多台的hadoop集群,还是相当的给力的。数据大概有10T的量。 最近在出月报数据的时候发现有一个任务节点一直跑不过去,已经超过失败次数的阈值,报警了。 预警很让人头疼,不能上班摸鱼了。 经过分析发现…

多个glibc库存在时如何查看ldd调用的哪个

但是发现存在多个版本的glibc版本,需要查看具体的库的信息,和相应的关键函数的信息,但是并不知道具体的libc.so.6的路径信息 rootalg-dev04:~/xingqiao# ldd --version ldd (GNU libc) 2.29 rootalg-dev04:/opt# which ldd /usr/local/bin/…

工厂自动化升级改造(2)-RS485与Modbus通信协议

在工业控制、电力通信、智能仪表等领域,数据交换通常依赖于串口通信。最初,RS232接口是主流选择,然而,由于工业现场的复杂性,各种电气设备产生的电磁干扰可能导致信号传输错误。 RS232和RS485是两种不同的串行通信协议,它们在电气特性、传输距离和拓扑结构等方面有所不同…

基于springboot的篮球联盟管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

长难句打卡5.8

If it is trying to upset Google, which relies almost wholly on advertising, it has chosen an indirect method: there is no guarantee that DNT by default will become the norm. 如果它想激怒几乎全靠广告业务运营的谷歌公司的话,那么它选择了一个间接的方…

目标检测CNN 目标检测发展历程 应用场景 智慧交通 自动驾驶 工业生产 智慧医疗

目标检测 目标检测是计算机视觉领域中的一个重要任务,其主要目的是让计算机能够自动识别图像或视频帧中所有目标的类别,并在目标周围绘制边界框以标示出每个目标的位置。 目标检测的过程通常包括两个主要步骤:目标定位和目标分类。目标定位是确定图像中是否存在感兴趣的目…

【功耗问题排查】

一、如何处理具体功耗case 在手机功耗测试中,因为我们在功耗测试中(电源电压)为固定值(老手机一般为3.8V左右,现在的大多项目采用4V左右),那么的大小直接由决定,所以,在沟…

在线音视频下载

https://cobalt.tools/ 支持 bilibili 等网站

顺序表的实现(迈入数据结构的大门)(1)

上一节我们认识到了什么是数据结构 这一节我们就来实现第一个数据结构的实现 思考一个问题: 假定一个数组,空间为10,已经使用了5个,向其中插入数据的步骤: 1.插入数据,我们先要求数组长度,其…

做抖音小店怎么选品?这几种实用性选品方式,新手一看就会

大家好,我是电商笨笨熊 做抖音小店,最重要的是选品,最让玩家头疼的还是选品。 选品该怎么选才能选中爆品,怎么做才能让店铺爆单? 笨笨熊做抖店已经四年多的时间,因此也总结出来一套最适合新手玩家去做的…

Stable Diffusion 指定模型,Lora 训练全流程

简介 在使用 Stable Diffusion 的时候,可以选择别人训练好的 Lora,那么如何训练自己的 Lora呢? 本篇文章介绍了如何训练Lora,如何筛选模型,如何在 Stable Diffusion 中使用。 闲话不多说,直接实际操作吧。…

【EI会议|投稿优惠】2024年物理化学与应用数学国际会议(IACPCAM 2024)

2024 International Conference on Physical Chemistry and Applied Mathematics 一、大会信息 会议名称:2024年物理化学与应用数学国际会议会议简称:IACPCAM 2024收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网:…

Debian——安装syzkaller——2024

系统:Debian 远程连接——我是不想安装tools没有办法复制黏贴,所以远程,根据个人情况选择是否远程连接 就是说使用Windows自带的远程mstsc,使用的不是ssh22端口,是TCP 3389端口 mkdir debian cd debian 二:安装go编译器 打开终端。使用wget命令从官方网站或可信的镜像…

SAP-ABAP-视图

1、什么是视图? 当需要查询多个表中的某些字段的数据时,就可以使用视图。视图不影响数据库中的数据,仅作为查询手段或工具。 2、视图类型: 数据库视图和维护视图经常使用。 3、创建视图SE11 3.1、数据库视图 可以直接输入表名…

js实现json数据可编辑

背景 项目中有低代码平台,由于历史脏数据和非同步编辑的问题,偶尔会出现数据错乱的问题,希望有一个快捷的方式修改数据 之前在用Formily的时候有注意到designable/react 里面的json数据编辑功能非常不错如果能应用到项目里就完美了 design…

UE灯光:点光和聚光灯的强度单位(cd、lm)

在虚幻引擎(UE)中,点光和聚光灯的光强使用两种不同的单位进行度量: 坎德拉(cd):坎德拉是光强度的国际单位(SI单位)。它代表光源在特定方向上每单位立体角发出的光通量。…

Chromium编译指南2024 Windows11篇-获取 Chromium 的源代码(五)

前言 在《Chromium编译指南2024(四)》中,我们完成了Git 的初始化配置。 现在,我们将进一步讨论如何获取 Chromium 的源代码,并准备构建所需的文件。 1. 获取Chromium的源代码 在合适的位置准备一个文件夹&#xff…