Linux系统移植

目录

一、简介

嵌入式Linux系统移植组成部分:

二、搭建交叉开发环境

选择交叉开发环境的原因:

1.Ubuntu和Windows下的文件互传

2.Ubuntu 下 NFS和 SSH服务开启

3.Ubuntu 交叉编译工具链安装

3.1修改环境变量

 3.2安装相关库

三、bootloader的选择和移植

编译U-boot

总结


一、简介

嵌入式Linux系统移植组成部分:

  1. 搭建交叉开发环境
  2. bootloader的选择和移植
  3. Linux kernel的配置、编译、和移植
  4. 根文件系统的制作

二、搭建交叉开发环境

交叉开发环境在嵌入式开发中至关重要。由于嵌入式系统的资源有限,开发者通常无法直接在目标板上进行开发。因此,需要在开发主机(如PC)上进行代码编写和测试。

在这个过程中,开发者使用交叉编译器将代码编译成适合目标机架构二进制文件,然后通过特定工具(如JTAG或串口)将程序烧录到开发板上。完成烧录后,开发者可以在目标机上运行和调试程序。这样的工作流程确保了在资源受限的环境中,依然能够高效地进行软件开发和调试。

选择交叉开发环境的原因:

  • 原因1:硬件资源限制

嵌入式系统通常使用的微控制器(MCU)具有较低的主频和有限的内存,这使得在目标设备上进行编译非常耗时且低效。相比之下,现代PC拥有更强大的处理能力和更大的内存,可以显著提高开发效率。

  • 原因2:体系结构和指令集差异

不同的嵌入式平台(如ARM、MIPS、PowerPC等)拥有各自独特的指令集和体系结构。这就需要交叉编译工具链,将源代码编译成适合特定平台的可执行文件。只有通过交叉编译,才能确保程序在目标平台上正常运行。

此外,交叉开发环境还能够帮助开发者在一个统一的环境中进行调试和测试,从而简化整个开发流程。这些因素共同促成了嵌入式开发中广泛使用交叉开发环境。

1.Ubuntu和Windows下的文件互传

FTP(文件传输协议,File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。它通常用于上传和下载文件到服务器,广泛应用于网站管理、文件共享等场景。

Ubuntu 作为FTP服务器,FileZilla 作为FTP客户端,客户端连接到服务器上,即可在windows和Ubuntu下实现文件传输。

2.Ubuntu 下 NFS和 SSH服务开启

NFS(网络文件系统,Network File System)是一种允许网络中的计算机共享文件和目录的协议。NFS使得用户能够在本地计算机上访问远程计算机上的文件,就像访问本地文件一样。

SSH(安全外壳协议,Secure Shell)是一种用于安全远程登录和其他网络服务的协议。它提供了加密的通信方式,使得用户可以通过不安全的网络安全地访问另一台计算机。

3.Ubuntu 交叉编译工具链安装

交叉编译器有很多种,我们使用Linaro出品的交叉编译器,Linaro是一间非营利性质的开 放源代码软件工程公司,Linaro 开发了很多软件,最著名的就是Linaro GCC编译工具链(编译器),关于 Linaro 详细的介绍可以到 Linaro 官网查阅。

下载解压完会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

3.1修改环境变量

修改环境变量,使用VI打开/etc/profile文件,命令如下:

sudo vi /etc/profile

打开/etc/profile 以后,在最后面输入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin 

 3.2安装相关库

sudo apt-get install lsb-core lib32stdc++6 

三、bootloader的选择和移植

Boot Loader(引导加载程序)是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境.我们选择U-boot

Boot Loader作用:

1.负责将操作系统内核加载到内存中。

2.负责初始化内存,特别是SDRAM。

编译U-boot

编译shell脚本

#!/bin/bash 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig        
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 

这三条命令中ARCH=arm设置目标为arm架构,CROSS_COMPILE指定所使用的交叉编译器。第一条命令相当于“make distclean”,目的是清除工程,一般在第一次编译的时候最好清 理一下工程。第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置uboot, 配置文件为mx6ull_14x14_ddr512_emmc_defconfig。最后一条指令相当于 “make -j12”也就是 使用12核来编译uboot。当这三条命令执行完以后uboot也就编译成功了 ,主要是修改平台的体系架构和交叉编译器

四.Linux kernel的配置、编译、和移植

  1. 将下载好的linux-2.6.35.tar.bz2拷贝到主目录下解压
  2. 修改顶层目录下的Makefile,主要修改平台的体系架构和交叉编译器
  3. 拷贝标准版配置文件,目的是得到跟我们开发板相关的配置信息。
  4. 编译内核 

五.根文件系统的介绍

根文件系统(Root Filesystem)是操作系统中最基本的文件系统,是整个文件系统结构的起点。它包含了操作系统运行所需的核心文件和目录,其他所有文件系统都挂载在根文件系统下。

根文件系统的基本特性:

1. 文件结构:
   - 根文件系统通常以“/”作为根目录,所有其他目录和文件都是其子目录或文件。常见的子目录包括:
     - `/bin`:存放基本的用户命令和可执行文件。
     - `/etc`:系统配置文件。
     - `/lib`:共享库文件。
     - `/usr`:用户程序和数据,通常包含更丰富的应用程序和库。
     - `/home`:用户的个人文件夹。
     - `/var`:可变数据文件,如日志文件和临时文件。

2. 挂载点:
   - 其他文件系统(如外部存储、网络文件系统等)通常以特定的挂载点挂载到根文件系统上,形成一个统一的目录结构。

3. 启动过程中的重要性:
   - 在系统启动时,Boot Loader加载内核并将根文件系统挂载到内存中,操作系统随即开始从根文件系统读取必要的文件以完成启动过程。

4. 根文件系统的类型:
   - 根文件系统可以是多种类型,如ext4、btrfs、XFS等,具体取决于操作系统和文件系统的设计选择。

5. 只读与可写:
   - 在某些场景中(如嵌入式系统),根文件系统可能被设计为只读,以增强系统的稳定性和安全性。

根文件系统的作用:

- 系统启动:提供操作系统启动所需的所有基本文件和配置。
- 文件组织:建立操作系统的目录结构,使得文件和程序可以被高效地组织和访问。
- 权限管理:通过文件系统的权限机制,控制对系统文件的访问,确保安全性。


总结

还没写完,写完再总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中大型企业网络架构和建设方案

1. 需求分析 (1)用户需求: 员工访问:支持内部员工通过有线和无线网络访问企业资源。 远程访问:支持远程办公员工通过VPN安全访问企业内部资源。 合作伙伴和客户访问:允许外部合作伙伴和客户通过受控渠道访问…

Linux 外设驱动 应用 2 KEY 按键实验

2 按键 2.1 按键介绍 按键是指轻触式按键开关,也称之为轻触开关。按键开关是一种电子开关,属于电子元器件类,最早出现在日本,称之为:敏感型开关,使用时以满足操作力的条件向开关操作方向施压开关功能闭合…

东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南

东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 文章目录 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南一 TongWeb V7二 Spring Boot JAR 配置文件三 修改 maven 依赖四 docker compose 启动项目五 查看 docker 信息 本文详细讲解了如何在 Docker 环境中将东方…

【笔记】Day2.5.1查询运费模板列表(未完

(一)代码编写 1.阅读需求,确保理解其中的每一个要素: 获取全部运费模板:这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序:这意味着查询结果需要根据模板的创建时间进行排序&#xff0…

嵌入式学习-IO进程-Day02

嵌入式学习-IO进程-Day02 标准IO函数接口 fread,fwrite 文件指针偏移函数 文件IO 概念 文件IO的特点 文件描述符 文件IO的函数接口 open 打开文件 close 关闭文件 read 读函数 write 写函数 lseek 移动文件指针 标准IO和文件IO对比 目录操作函数 opendir 打开目录 c…

套接字Socket

套接字 在网络中通过 IP 地址来表示和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到 IP 地址即构成套接字 Socket。在网络中采用发送方和接收方的套接字来识别端点。套接字,实际上是一个通信端点&#xff0c…

C语言初阶小练习2(三子棋小游戏的实现代码)

这是C语言小游戏三子棋的代码实现 test.c文件是用来测试的部分 game.h文件是用来声明我们说写出的函数 game.c文件是用来编写我们的功能实现函数部分 1.test.c #define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() {printf("***************…

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序

原理: 在 x86 系统里使用交叉编译工具链(arm 版 gcc/g)编译程序,然后放在 arm 系统里运行。 arm 版本 使用 lscpu 查看 cpu 架构 版本说明armv732 bitarmv8/arrch6464 bit 安装交叉编译工具链 # 针对 armv7 sudo apt install…

库卡ForceTorqueControl(一)

1. 功能说明 ForceTorqueControl 是一个可后载入的备选软件包,具有下列功能: 执行取决于测得的过程力和力矩的运动 遵守过程力和力矩,不取决于工件的位置和尺寸 遵守加工工件期间复杂的过程力变化 沿着根据测得的过程力编程的轨迹调整速度 通…

MySQL上新:MySQL 9.1.0发布

MySQL 9.1.0 已经于 2024 年 10 月 15 日正式发布。这是一个创新版本,增加了一些新功能、修复了一些问题并且弃用了一些旧功能。 同时发布的还有 MySQL 8.4.3 以及 MySQL 8.0.40。 以下是该版本包含的部分更新。 原子DDL 在该版本之前,虽然 CREATE DAT…

【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图

随着AI大语言模型的广泛应用,大尺度空间模拟预测与数字制图技术在不确定性分析中的重要性日益凸显。这些技术已经成为撰写高分SCI论文的关键工具,被誉为“高分论文密码”。大尺度模拟技术能够从不同的时空尺度揭示农业生态环境领域的内在机理和时空变化规…

JAVA开源项目 课程智能组卷系统 计算机毕业设计

本文项目编号 T 009 ,文末自助获取源码 \color{red}{T009,文末自助获取源码} T009,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

【JAVA毕业设计】基于Vue和SpringBoot的医院电子病历管理系统

本文项目编号 T 008 ,文末自助获取源码 \color{red}{T008,文末自助获取源码} T008,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

Focal Loss

Focal Loss Kullback-Leibler Divergence(相对熵)NLL LossCross Entropy LossBalanced Cross Entropy LossFocal Loss应用场景:1、车道检测与分类 Kullback-Leibler Divergence(相对熵) KL散度(Kullback-L…

python自动化办公实例(使用openpyxl、os处理统计Excel表中的数据并将其合并)

源数据格式 以其中一个表格为例 可以看到表中数据比较杂乱且并没有我们想要的数据、指标(如一等奖、二等奖的数量)不利于下一步数据的分析。所以我们需要手动对数据进行一些处理,大致格式如下: 数据处理格式 这里的手动处理可以…

图像的空域处理实验作业

# 在绘图中显示中文字体,而非乱码 from pylab import mpl mpl.rcParams["font.sans-serif"] ["SimHei"]import cv2 import matplotlib.pyplot as plt import numpy as np1 绘制伽马变换的函数图像,并导入一张图像,对其进…

基础算法(6)——模拟

1. 替换所有的问号 题目描述: 算法思路: 从前往后遍历整个字符串,找到问号之后,尝试用 a ~ z 的每一个字符替换即可 注意点:需考虑数组开头和结尾是问号的边界情况 代码实现: class Solution {public …

《深度学习》OpenCV FisherFaces算法人脸识别 原理及案例解析

目录 一、FisherFaces算法 1、什么是FisherFaces算法 2、原理 3、特点 4、算法步骤 1)数据预处理 2)特征提取 3)LDA降维 4)特征投影 5)人脸识别 二、案例解析 1、完整代码 运行结果: 一、Fish…

Java 深度优先搜索

深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索树或图的算法。在Java中,可以使用递归或迭代的方法来实现DFS。下面我将分别介绍这两种实现方式。 递归实现 递归实现通常更为直观和简洁。在递归方法中,我们会使用一…

[Java基础] 流程控制

[Java基础] 运算符 [Java基础] 基本数据类型 [Java基础] Java HashMap 的数据结构和底层原理 目录 基本语法 条件语句 if 语句 if-else 语句 switch 语句 循环语句 for 循环 while 循环 do-while 循环 跳转语句 break 语句 continue 语句 return 语句 最佳实践…