目录
一、简介
嵌入式Linux系统移植组成部分:
二、搭建交叉开发环境
选择交叉开发环境的原因:
1.Ubuntu和Windows下的文件互传
2.Ubuntu 下 NFS和 SSH服务开启
3.Ubuntu 交叉编译工具链安装
3.1修改环境变量
3.2安装相关库
三、bootloader的选择和移植
编译U-boot
总结
一、简介
嵌入式Linux系统移植组成部分:
- 搭建交叉开发环境
- bootloader的选择和移植
- Linux kernel的配置、编译、和移植
- 根文件系统的制作
二、搭建交叉开发环境
交叉开发环境在嵌入式开发中至关重要。由于嵌入式系统的资源有限,开发者通常无法直接在目标板上进行开发。因此,需要在开发主机(如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的配置、编译、和移植
- 将下载好的linux-2.6.35.tar.bz2拷贝到主目录下解压
- 修改顶层目录下的Makefile,主要修改平台的体系架构和交叉编译器
- 拷贝标准版配置文件,目的是得到跟我们开发板相关的配置信息。
- 编译内核
五.根文件系统的介绍
根文件系统(Root Filesystem)是操作系统中最基本的文件系统,是整个文件系统结构的起点。它包含了操作系统运行所需的核心文件和目录,其他所有文件系统都挂载在根文件系统下。
根文件系统的基本特性:
1. 文件结构:
- 根文件系统通常以“/”作为根目录,所有其他目录和文件都是其子目录或文件。常见的子目录包括:
- `/bin`:存放基本的用户命令和可执行文件。
- `/etc`:系统配置文件。
- `/lib`:共享库文件。
- `/usr`:用户程序和数据,通常包含更丰富的应用程序和库。
- `/home`:用户的个人文件夹。
- `/var`:可变数据文件,如日志文件和临时文件。
2. 挂载点:
- 其他文件系统(如外部存储、网络文件系统等)通常以特定的挂载点挂载到根文件系统上,形成一个统一的目录结构。
3. 启动过程中的重要性:
- 在系统启动时,Boot Loader加载内核并将根文件系统挂载到内存中,操作系统随即开始从根文件系统读取必要的文件以完成启动过程。
4. 根文件系统的类型:
- 根文件系统可以是多种类型,如ext4、btrfs、XFS等,具体取决于操作系统和文件系统的设计选择。
5. 只读与可写:
- 在某些场景中(如嵌入式系统),根文件系统可能被设计为只读,以增强系统的稳定性和安全性。
根文件系统的作用:
- 系统启动:提供操作系统启动所需的所有基本文件和配置。
- 文件组织:建立操作系统的目录结构,使得文件和程序可以被高效地组织和访问。
- 权限管理:通过文件系统的权限机制,控制对系统文件的访问,确保安全性。
总结
还没写完,写完再总结