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

ARM版Oracle安装包_如何把Linux移植到手机  linux作为一款流行的嵌入式系统,目前已经有多种架构的MCU支持Linux移植,arm64就是其中一种。今天在这里想做一个笔记,记录一下完整的arm64移植过程。嵌入式Linux系统组成部分嵌入式Linux移植到开发板上时,主要有四个组成部分,下面一一列举。  在启动过程中,bootloader加载设备树文件(dtb),之后启动内核(Startkernel),进而加载根文件系统(debian或者ubuntu),最后进入系统。  那么我们所做的工作可以分为以下三部分:1、进行bootlo

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  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目录

cd /opt

解压下载的交叉编译工具

sudo tar -jxvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

进行环境变量设置

sudo vim /etc/profile

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

export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin

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

source /etc/profile

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

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补丁放到内核源码目录,之后执行

sudo patch -p1 < patch-4.19.132-rt59.patch

这样补丁就打好了

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

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  xxx_defconfig

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

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)进行交叉编译内核

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

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules

  安装modules到根文件系统

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=~/debian_stretch/usr

(2)安装headers头文件

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设置启动地址即可。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • JSP中Session的使用

    JSP中Session的使用

  • jquery输入数字随机抽奖特效

    简介:jQuery自定义数值抽奖活动代码是一款点击开始按钮计算机会产生玩家输入范围内的随机数,点击停止按钮,将显示数字最终结果的效果。效果展示 http://hovertree.com/te

    2021年12月26日
  • android设计个人简历页面_Android程序员个人简历模板下载(Word格式)[通俗易懂]

    android设计个人简历页面_Android程序员个人简历模板下载(Word格式)[通俗易懂]求职意向:Android程序员熟悉Android系统体系结构和软件开发技术,熟悉Eclipse集成开发环境以及Git代码管理工具;熟悉网络通信协议Http,Socket编程,XMPP协议以及JSON数据解析;熟悉Android程序开发,熟悉四大组件、常用UI组件、多线程等操作及原理;熟练掌握SQLite数据库、SharedPreferences以及文件存储等存储方式;衷情于互联网技术应用。XXXX…

  • python之random库

    random库是用于产生并运用随机数的标准库1.random库函数(1)random.seed(a)设置随机种子数,可以是浮点数或整数,如果不设置的话,则random库默认以系统时间产生当作随

    2021年12月29日
  • let暂时性死区

    let暂时性死区只要块级作用域内存在let命令,他所声明的变量就绑定这个区域,不再受外部的影响。vartmp=123;if(true){tmp=’abc’;lettmp;}抛出错误:ReferenceError上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。ES…

  • Redis入门_redis菜鸟教程

    Redis入门_redis菜鸟教程Redis文章目录Redis一、Redis概述二、Redis应用场景三、Redis的下载和安装四、Redis服务的启动五、Redis命令行工具六、Redis基础知识七、Redis数据类型1.key(键)2.String(字符串)3.List(列表)4.Set(集合)5.Zset(有序集合)6.Hash(哈希)八、实践案例九、Redis常用查询指令十、Jedis的使用十一、Redis可视化工具十二、持久化概念十三、RDB十四、AOF十五、AOF重写十六、RDB与AOF的选择一、Re

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号