ubuntu主机搭建sysroot交叉编译环境
ubuntu主机搭建sysroot交叉编译环境
主机是 ubuntu22.04 x86-64
host | ubuntu22.04 |
host-arch | x86-64 |
host-cpu | i9-13900k |
目标板是香橙派5b ,ubuntu22.04,aarch64 ,cpu rk3588s
target | ubuntu22.04 |
target-arch | aarch64 |
target-cpu | rk3588s |
安装 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
扩展分区
-
打开
fdisk
:sudo fdisk /dev/loop21
-
打印当前分区表:
- 输入
p
查看当前分区表。
- 输入
-
删除最后一个分区:
- 输入
d
删除分区,选择分区号 2(即Orangepi5b.img2
)。
- 输入
-
创建新的分区:
- 输入
n
创建新的主分区。 - 选择分区号 2。
- 回车,使用默认的起始扇区。
- 回车,接受默认值,结束扇区设置为最大。
- 输入
-
保存并退出:
- 输入
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
原文地址:https://blog.csdn.net/WMX843230304WMX/article/details/143510284
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!