前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARM版Oracle安装包_如何把Linux移植到手机

ARM版Oracle安装包_如何把Linux移植到手机

作者头像
全栈程序员站长
发布2022-09-30 18:12:27
3.1K0
发布2022-09-30 18:12:27
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

  linux作为一款流行的嵌入式系统,目前已经有多种架构的MCU支持Linux移植,arm64就是其中一种。今天在这里想做一个笔记,记录一下完整的arm64移植过程。

嵌入式Linux系统组成部分

嵌入式Linux移植到开发板上时,主要有四个组成部分,下面一 一列举。

在这里插入图片描述
在这里插入图片描述

  在启动过程中,bootloader加载设备树文件(dtb),之后启动内核(Start kernel),进而加载根文件系统(debian或者ubuntu),最后进入系统。

  那么我们所做的工作可以分为以下三部分: 1、进行bootloader的编译开发和移植。 2、进行内核文件的编译和移植(Image和dtb)。 3、进行根文件系统的编译和移植。

bootloader的移植

  每个开发板的bootloader开发不太一样,个人经历的两块板子,bootloader和uboot移植过程就大相径庭,如果你手头有板子的话,建议以原厂提供的方式为准。

  这里不介绍bootloader的移植和uboot的移植,感兴趣的话,请参考自己的开发板资料或者网上资料。

根文件系统的生成

  根文件系统的生成可以参考链接 构建debian for ARM   我们假定最后生成的根文件系统为 debian_stretch文件夹。

Linux内核的移植

  Linux内核的移植,主要是移植最后生成的内核镜像Image文件以及设备树文件dtb   Linux内核的编译,也是为了生成Image以及dtb

1、准备工作   (1)原厂提供的内核源代码。   (2)linaro官网下载的交叉编译工具 aarch64-linux-gnu- 。   (3)linux系统的pc机一台。 2、进行交叉编译的配置工作   交叉编译的意思是在你x86的pc上,编译出能够在arm64上运行的程序,充当的是“翻译”的角色。 进入到/opt目录

代码语言:javascript
复制
cd /opt

解压下载的交叉编译工具

代码语言:javascript
复制
sudo tar -jxvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

进行环境变量设置

代码语言:javascript
复制
sudo vim /etc/profile

在代码底部,加入环境变量

代码语言:javascript
复制
export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin

之后保存退出,执行立即生效

代码语言:javascript
复制
source /etc/profile

接下来,当你在终端拼写aarch64并按下tab键时,命令行会自动补全如下信息。

代码语言:javascript
复制
debian:~$ aarch64-linux-gnu-
aarch64-linux-gnu-addr2line      aarch64-linux-gnu-gcov-tool
aarch64-linux-gnu-ar             aarch64-linux-gnu-gdb
aarch64-linux-gnu-as             aarch64-linux-gnu-gdb-add-index
aarch64-linux-gnu-c++            aarch64-linux-gnu-gfortran
aarch64-linux-gnu-c++filt        aarch64-linux-gnu-gprof
aarch64-linux-gnu-cpp            aarch64-linux-gnu-ld
aarch64-linux-gnu-dwp            aarch64-linux-gnu-ld.bfd
aarch64-linux-gnu-elfedit        aarch64-linux-gnu-ld.gold
aarch64-linux-gnu-g++            aarch64-linux-gnu-nm
aarch64-linux-gnu-gcc            aarch64-linux-gnu-objcopy
aarch64-linux-gnu-gcc-7.5.0      aarch64-linux-gnu-objdump
aarch64-linux-gnu-gcc-ar         aarch64-linux-gnu-ranlib
aarch64-linux-gnu-gcc-nm         aarch64-linux-gnu-readelf
aarch64-linux-gnu-gcc-ranlib     aarch64-linux-gnu-size
aarch64-linux-gnu-gcov           aarch64-linux-gnu-strings
aarch64-linux-gnu-gcov-dump      aarch64-linux-gnu-strip

说明交叉编译工具配置成功

3、进行内核(kernel)的配置与编译。

(1)给内核打实时补丁(可选,不打实时补丁的话,可以跳到第二步)   将网上下载的rt补丁放到内核源码目录,之后执行

代码语言:javascript
复制
sudo patch -p1 < patch-4.19.132-rt59.patch

这样补丁就打好了

(2)进行内核配置。   导入原厂的默认配置

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  xxx_defconfig

  说明:xxx_defconfig是我从原厂内核源代码arch/arm64/configs那里拷贝过来的内核配置文件,里面包含了原厂已经做好的,对板子的基本配置。这也是我为什么开头推荐下载内核源码要从开发板原厂下载的原因。否则linux官网的内核可能没对你这款MCU进行支持和配置,即使你以后能编译,也无法生成dtb文件。   进行自定义内核配置

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  menuconfig

打了rt补丁的话,需要在menuconfig的界面下,进行如下操作

进入“General setup” 在”Preemption Model”中选择“Fully Preemptible Kernel(Real-Time)”

回到上一层,进入”Device Drivers”中,去掉“Staging drivers”


  之后保存,退出界面 (3)进行交叉编译内核

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  all                 //时间较长,可以去喝杯茶

  最后交叉编译完成,会生成arch/arm64/boot/Image 以及arch/arm64/boot/dtbs/xxxx/*******.dtb文件。

  注意:上一行的xxxx为你的开发板或MCU原厂的名字,如Sumsung或者xilinx。*******.dtb对应你的开发板型号。   这也是我推荐使用原厂内核的原因。

接下来就可以移植Image内核镜像以及dtb设备树了

modules以及headers头文件安装

  上面我们生成了debian_stretch根文件系统,以及Image,dtb 内核镜像和设备树文件,按理来说已经可以进行移植了。但是不要忘了Modules以及headers也是内核里比较重要的两个内容   modules 是一些内核编译的模块选项,需要你安装到根文件系统中,跟随系统一起启动   headers 是一些头文件,需要你安装到根文件系统中 。linux安装应用软件经常会用到这些头文件。

(1)安装modules文件   生成modules

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules

  安装modules到根文件系统

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=~/debian_stretch/usr

(2)安装headers头文件

代码语言:javascript
复制
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- headers_install  INSTALL_HDR_PATH=~/debian_stretch/usr

  到现在为止,完整的rootfs(根文件系统),Image(内核镜像),.dtb(设备树文件),都已备齐。

移植到开发板有两种方式

1、下载上述三个文件到flash中 2、下载上述三个文件到SD卡中

之后在bootloader或者uboot设置启动地址即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192657.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 嵌入式Linux系统组成部分
  • bootloader的移植
  • 根文件系统的生成
  • Linux内核的移植
  • modules以及headers头文件安装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档