百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

Buildroot系统移植Ubuntu 移植ubuntu到arm

yuyutoo 2024-10-11 21:43 2 浏览 0 评论

原文发表于个人博客,在头条是平台首发。原创作品,转载请注明出处。

作者:王永建,联系方式:blog@wangyongjian.cn,博客地址:blog.wangyongjian.cn


背景说明

这篇文章的标题可能不是恰当。情况是这样的,我买了一个HTNICE的GT6757嵌入式主机,采用的ARM A35架构,800Mhz主频,配512Mb内存和8G emmc存储。设备整体指标均符合我的应用需求。随机安装了Buildroot打包的Linux系统,内核版本5.10.146。我以前开发的应用程序是基于Ubuntu系统,直接用过来无法运行,涉及到很多依赖,通过Buildroot打包的系统自身没有提供包管理工具,给我们的移植工作带了一些难度。厂家暂时没有做Ubuntu支持镜像,本着不断折腾的探索精神,尝试着通过Google搜索了一下,还真有一些文章在介绍实现的方法。翻看了几篇文章发现这些文章的源头可能都是一个出处,且有不同的删减。很难根据一篇文章很顺利的完成移植。这里将完整的过程做个记录,希望能对看到这篇文章的朋友提供些参考。

移植说明

Ubuntu为嵌入式应用提供了Ubuntu Base,用于为特定需求创建自定义映像的最小文件系统,是Ubuntu可以运行的最小环境。详细说明见Base - Ubuntu Wiki

针对每个发行版,官方都提供了不同CPU架构的Base文件系统,可通过Index of /ubuntu-base/releases根据需要下载不同的版本。

移植准备

  • 已下载的Ubuntu Base文件系统文件
  • 目标设备的内核文件(Linux kernel)
  • 目标设备的引导文件(boot-loader)
  • 开发系统,我是在实体机上直接操作的,也可以在开发机上操作,需要用到qemu-user-static软件包,qemu-user-static是一个仿真器,用于在不同CUP上运行待构建系统的指令集。我检索到的文章这是基于这个软件包的,可根据需要安装,相关方法可自行搜索,相关文章很多。

移植步骤

1.创建文件夹并准备Ubuntu Base

在 home下载创建ubuntu文件,将已下载的Ubuntu Base文件复制到此目录进行解压,并进入/home/ubuntu/

tar -zxvf ubuntu-base-18.04.5-base-arm64.tar.gz

2.在开发系统挂载Ubuntu Base

mount -t proc /proc ./proc
mount -t sysfs /sys ./sys
mount -o bind /dev ./dev
mount -o bind /dev/pts ./dev/pts

(1) proc文件系统是指一类虚拟文件系统,它不是从磁盘上的分区中读取数据,而是通过内核在内存中动态生成的。

proc文件系统通常用于提供有关系统内核和进程信息的接口,例如系统内存使用情况、硬件设备信息等。在Linux系统中挂载proc文件系统的命令格式如下:

mount -t proc [选项] /proc [挂载点]
其中,-t proc参数表示将要挂载的文件系统类型是proc文件系统;/proc表示要挂载的proc文件系统的挂载点;ubuntu/proc表示挂载点在当前目录下的一个名为ubuntu的子目录中的proc子目录。通过这个命令,可以将proc文件系统挂载到指定的挂载点,以便访问其中包含的有关系统内核和进程信息的接口。

(2)mount -y sysfs命令和mount -t proc同理;

(3) mount -o bind命令将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问;

Ubuntu-base 根文件系统构建 - 蒲城小农 - 博客园)

3.设置Ubuntu Base系统DNS

因为对Ubuntu Base系统定制需要安装软件,需要联网,下载的Ubuntu Base文件系统里并没有设置DNS,需要联网,这里先将开发机的DNS配置复制到Ubuntu Base系统。

cp /etc/resolv.conf /home/ubuntu/etc/resolv.conf

4.进入Ubuntu Base系统并进行定制

chroot chroot ./

更新软件源,大部分文章都提到了更换源的说明,这个根据需要处理即可,我用的系统源,速度还可以。

apt-get update

这里遇到了一个警告提示;W: Download is performed unsandboxed as root as file '/var/cache/apt/archives/partial/libc6_2.27-3ubuntu1.6_arm64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)。一开始尝试了根据提示去修改权限,结果警告依旧存在,后来发现这个并没有什么影响,遇到了可以忽略

升级到最新版

apt-get upgrade

同样也会看到一个警告;W: Download is performed unsandboxed as root as file '/var/lib/apt/lists/partial/ports.ubuntu.com_ubuntu-ports_dists_bionic_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied),同上面忽略即可。

安装软件,这个根据需要安装即可,我安装了这么多

apt-get install language-pack-en-base sudo ssh net-tools ethtool

apt-get install schroot python avahi-daemon netbase binutils

apt-get install debhelper  ifupdown  udev  iputils-ping resolvconf wget apt-utils nano

修改密码,我开发的应用是运行在root下的,这里并没有创建新用户,可以根据需要创建。

passwd root

初始化完成,退出Ubuntu Base

exit

上面做过的Mount依次umount一下,我没有做,直接重启了一下设备。

复制内核,将目标设备的内核复制到Ubuntu Base

cp -R /lib/modules /home/ubuntu/lib/

打包Ubuntu Base

cp -R /lib/modules /home/ubuntu/lib/

将打包的Ubuntu Base文件系统恢复到目标设备上,各个开发版的略有不同,请根据厂家提供的方式处理。

恢复完成后重新进入系统。可以看到已经是Ubuntu系统了,可以通过APT工具来解决依赖包问题了。

小问题处理

进入Ubuntu系统后,发现没有网络,这个咋玩

应该是在上面的步骤中没有配置网络造成的,这里参考了Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统 - 大奥特曼打小怪兽 - 博客园


echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
ifup eth0

echo auto eth1 > /etc/network/interfaces.d/eth1
echo iface eth1 inet dhcp >> /etc/network/interfaces.d/eth1
ifup eth1

问题解决

看了一下资源占用情况,新系统下还可以,后续继续折腾,还要再验证一下稳定性后才改用于生成环境。

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: