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

Linux系统移植篇(十)根文件系统构建 V3 - Yocto

可以简单的将 Ubuntu 理解为一个根文件系统,和我们用 busybox、buildroot 制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上,但是因为 I.MX6ULL 孱弱的性能,本章我们就只移植 Ubuntu 的最小根文件系统,没有图形化界面。

定制化 Linux 镜像:你可以根据具体的硬件平台和项目需求,构建只包含必要组件的精简系统,从而降低资源占用,提高系统性能和安全性。

一致的构建环境:通过 BitBake 等工具,Yocto 为开发者提供了一个稳定、可重复的构建体系,这使得团队协作和系统维护更加高效。

跨平台支持:Yocto Project 支持多种 CPU 架构和硬件平台,可以大大降低开发者在不同硬件间迁移和部署的复杂性。

灵活的定制和扩展:通过使用 meta 层,你可以将自定义的应用、驱动或库集成到系统中,满足特定的功能需求。

强大的社区支持:作为一个活跃的开源项目,Yocto 拥有丰富的文档、示例以及开发者社区,可以帮助你快速解决开发过程中遇到的问题。

ubuntu-base 获取

Ubuntu 的移植非常简单,不需要我们编译任何东西,因为 Ubuntu 官方已经将根文件系统 制作好了!我们只需要简单配置一下 Ubuntu 官方提供的 base 根文件系统,使其在我们的开发 板上跑起来即可。因此我们首先需要下载 Ubuntu-base,为了和我们的教程一致,本章我们移植 Ubuntu 16.04 版本根文件系统,有兴趣的可以移植其他版本的 Ubuntu 内核,比如 18.04。

ubuntu-base,进入到 ubuntu-base 下载界面。

下载 releases 版本的根文件系统

ubuntu 根文件系统构建,解压缩 ubuntu base 根文件系统。

为了存放 ubuntu base 根文件系统,先在 PC 的 Ubuntu 系统中的 nfs 目录下创建一个名为 ubuntu_rootfs 的目录,命令如下:

sudo tar -vzxf ubuntu-base-16.04.5-base-armhf.tar.gz

ubuntu base 解压以后就是大家最常见的 linux 根文件系统,但是 目前还不能直接使用,还需要对其做一些其他的配置。

需要在 PC 的 Ubuntu 上安装 qemu 工具,命令如下:

sudo apt-get install qemu-user-static

刚刚安装的 qemu-user-static 拷贝到刚刚解压出来的 ubuntu base 目录中,也就是 ubuntu_rootfs/usr/bin 目录下,命令如下:

cd /home/zuozhongkai/linux/nfs/ubuntu_rootfs //进入到 ubuntu_rootfs 目录下 
sudo cp /usr/bin/qemu-arm-static ./usr/bin/ //拷贝 qemu-arm-static

 设置软件源

设置软件源,打开根文件系统中的 ubuntu_rootfs/etc/apt/sources.list 文件,在此文件最后面 添加软件源,比如国内常用的清华源、中科大源等等,这些软件源可以直接在网上查找。注意 这里要用 ubuntu16.04 的 ARM 源,不能找成了 X86 的源。根据网上的推荐,我们使用如下所示 的中科大软件源(这里非常感谢一位网名为“兔子”的网友提醒并测试):

#中科大源 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe 

在主机挂载根文件系统

接下来将上面制作的根文件系统挂载到主机上,需要挂载 proc、sys、dev、dev/pts 等文件 系统,最后使用 chroot 将主机的根文件系统切换到我们前面制作的根文件系统中。这里我们通 过两个脚本文件来完成挂载和卸载操作,首先是挂载脚本 mount.sh,在 ubuntu_rootfs 目录下创建一个名为 mount.sh 的 shell 脚本。

首先打包 ubuntu 根文件系统,命令如下

tar -vcjf ubuntu_rootfs.tar.bz2 * //打包根文件系统

我们制作的 ubuntu 根文件系统默认只有一个 root 用户,默认都是用 root 用户登录的,和我 们在 PC 上使用 Ubuntu 系统一样,默认使用 root 用户的话可能会因为操作失误导致系统被破 坏。因此最好创建一个普通用户,默认使用普通用户,当需要 root 权限的时候就使用“sudo” 命令即可。使用 adduser 命令添加普通用户

adduser xxxx

配置构建参数

MACHINE = "qemuarm"  # 或者你自己设备对应的 MACHINE 名称

编译生成根文件系统

bitbake core-image-minimal

编译完成后,生成的文件通常会位于 tmp/deploy/images/<MACHINE>/ 目录下

这里没有讲环境变量的内容,可以参考之前的文章,肯定是要配置的,毋庸置疑。


http://www.kler.cn/a/598476.html

相关文章:

  • 第8章:Docker数据持久化与卷管理
  • 基于Matlab的大气湍流光束传输特性的研究
  • Android Compose 层叠布局(ZStack、Surface)源码深度剖析(十三)
  • Android 根据Url使用Retrofit框架进行文件下载
  • 从复杂到集成:APVSG系列多通道相参矢量信号源重塑量子比特(Qubit )信号生成技术
  • qt 对QObject::tr()函数进行重定向
  • Haption Virtuose力反馈设备在CAVE投影系统中提供真实训练交互
  • 基于虚拟知识图谱的语义化决策引擎
  • 机器人前沿技术的发展与展望
  • 跨平台RTSP高性能实时播放器实现思路
  • 使用Pygame构建贪吃蛇游戏:从零开始的Python游戏开发之旅
  • 【Vue3入门2】02-记事本案例
  • ISIS-1 ISIS概述
  • 基于ISO 26262的汽车芯片认证流程解读
  • 汽车芯片成本控制:挑战、策略与未来趋势
  • 如何用AI轻松制作PPT,让演示更智能!
  • 开发语言漫谈-groovy
  • 论文阅读:2023 arxiv Multiscale Positive-Unlabeled Detection of AI-Generated Texts
  • 批量在多个 PPT 文档的指定位置插入页,插入首页插入尾页
  • 如何使用SQL进行多表联合查询(SQLⅰte举例)