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 工具,命令如下:

bash 复制代码
sudo apt-get install qemu-user-static

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

bash 复制代码
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 的源。根据网上的推荐,我们使用如下所示 的中科大软件源(这里非常感谢一位网名为"兔子"的网友提醒并测试):

bash 复制代码
#中科大源 
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>/ 目录下

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

相关推荐
大树8812 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush412 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52012 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz13 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工13 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
大鱼>13 小时前
大语言模型+物联网:LLM理解物理世界
物联网·struts·语言模型·多模态·aiot
果丁智能13 小时前
物联网智能锁赋能集中式住宿:身份核验与远程权限管控的全链路技术实践
大数据·人工智能·物联网·智能家居
酣大智14 小时前
ARP代理--工作原理
运维·网络·arp·arp代理