当前位置: 首页 > news >正文

ubuntu主机搭建sysroot交叉编译环境

ubuntu主机搭建sysroot交叉编译环境

主机是 ubuntu22.04 x86-64

hostubuntu22.04
host-archx86-64
host-cpui9-13900k

目标板是香橙派5b ,ubuntu22.04,aarch64 ,cpu rk3588s

targetubuntu22.04
target-archaarch64
target-cpurk3588s

安装 qemu-user-static

进入 chroot 环境,必须的仿真环境 qemu-user-static

sudo apt-get update
sudo apt-get install qemu-user-static

复制一份目标镜像,用于交叉编译开发环境

sudo dd if=Orangepi5b_1.0.8_ubuntu_jammy_desktop_xfce_linux6.1.43.img of=Orangepi5b.img bs=4M status=progress

扩大镜像

sudo qemu-img resize Orangepi5b.img +40G

你已经成功地扩展了 .img 文件的大小,但还需要调整分区表以利用新增的空间:

1. 映射 .img 文件

.img 文件重新映射到环回设备:

sudo losetup -P /dev/loop21 Orangepi5b.img

2. 使用 fdisk 扩展分区

  1. 打开 fdisk

    sudo fdisk /dev/loop21
    
  2. 打印当前分区表

    • 输入 p 查看当前分区表。
  3. 删除最后一个分区

    • 输入 d 删除分区,选择分区号 2(即 Orangepi5b.img2)。
  4. 创建新的分区

    • 输入 n 创建新的主分区。
    • 选择分区号 2。
    • 回车,使用默认的起始扇区。
    • 回车,接受默认值,结束扇区设置为最大。
  5. 保存并退出

    • 输入 w 保存更改并退出 fdisk

3. 检查并修复文件系统

使用 e2fsck 检查并修复文件系统,刚才的分区2:

sudo e2fsck -f /dev/loop21p2

4. 扩展文件系统

使用 resize2fs 扩展文件系统:

sudo resize2fs /dev/loop21p2

5. 挂载文件系统,进入 chroot 环境:

挂载文件系统:

sudo mount /dev/loop21p2 /media/wmx/opi_root
sudo mount --bind /proc /media/wmx/opi_root/proc
sudo mount --bind /sys /media/wmx/opi_root/sys
sudo mount --bind /dev /media/wmx/opi_root/dev
sudo mount --bind /dev/pts /media/wmx/opi_root/dev/pts

将 QEMU 的静态二进制文件拷贝到目标文件系统中

sudo cp /usr/bin/qemu-aarch64-static /media/wmx/opi_root/usr/bin/

进入 chroot 环境

sudo chroot /media/wmx/opi_root /bin/bash

6. 检查可用空间

chroot 命令行:

root@wmx-pc:/home/orangepi/workspace# df -h
文件系统          大小  已用    可用  已用% 挂载点
/dev/loop21p2    47G  6.8G   39G   16%  /

成功地扩展分区并调整文件系统,从而在 chroot 环境中创建工作空间

7 搭建工作环境

下载llvm aarch64架构的编译工具链,复制到工作空间中

主机命令行:

cp -rv LLVM-ET-Arm-19.1.1-Linux-AArch64.tar.xz /media/wmx/opi_root/workspace

复制main.cpp到工作空间中

主机命令行:

cp -rv main.cpp /media/wmx/opi_root/workspace

其中main.cpp:

#include <iostream>
using namespace std;
int main(){std::cout<<"Hello World!";return 0;
}

chroot 命令行:

cd /home/orangepi/workspace
export PATH=$PATH:/home/orangepi/workspace/LLVM-ET-Arm-19.1.1-Linux-AArch64/bin# 编译
clang++ -I/usr/include/c++/11 -I/usr/include/aarch64-linux-gnu/c++/11   -L/usr/lib/gcc/aarch64-linux-gnu/11/  main.cpp -o main

运行,验证是aarch64程序

root@wmx-pc:/home/orangepi/workspace# ./main 
Hello World!
root@wmx-pc:/home/orangepi/workspace# file main
main: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

8 退出 chroot

chroot 命令行:

exit

9 关闭所有挂载点

sudo umount /media/wmx/opi_root/proc
sudo umount /media/wmx/opi_root/sys
sudo umount /media/wmx/opi_root/dev/pts
sudo umount /media/wmx/opi_root/dev
sudo umount /media/wmx/opi_root
sudo losetup -d /dev/loop21
http://www.lryc.cn/news/480719.html

相关文章:

  • Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码...
  • 实验三 JDBC数据库操作编程(设计性)
  • 各种环境换源教程
  • Rust项目中的Labels
  • Jmeter的安装和使用
  • 初识Electron 进程通信
  • go语言中的通道(channel)详解
  • 【JS】内置类型的相关问题
  • Mac上无法访问usr/local的文件
  • http 常见状态码
  • 代码训练营 day59|并查集
  • Node.js——fs模块-路径补充说明
  • 华为ENSP--ISIS路由协议
  • 论软件可靠性设计及其应用
  • Android中桌面小部件framework层使用到的设计模式
  • 【JavaEE进阶】HTML
  • ElasticSearch 添加IK分词器
  • 可视化建模与UML《顺序图实验报告》
  • Mac的极速文件搜索工具,高效管理文件
  • 公开仓库改私有再配置公钥后Git拉取仍需要输入用户名的问题
  • 工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置
  • window下安装rust 及 vscode配置
  • 【数据结构】【线性表】单链表1—概念即创建(附C语言源码)
  • centos7的maven配置
  • day57 图论章节刷题Part08(拓扑排序、dijkstra(朴素版))
  • 【Steam登录】protobuf协议逆向
  • git 对已提交的说明进行编辑
  • CTF —— 网络安全大赛
  • 【大数据测试spark+kafka-详细教程(附带实例)】
  • 如何为 GitHub 和 Gitee 项目配置不同的 Git 用户信息20241105