1、Linux系统的软件架构
如上图所示,系统移植主内容包括 Boot loader (uboot),kernel,file system 三大部分,后续系统移植也是围绕这三大部分编写。
2、Linux 系统移植平台搭建
Linux系统移植一般在一个平台上开发,然后烧录到板子上使用。我们工作的电脑基本都是X86平台,这里默认工作电脑是x86架构,要运行的目标板子基本都是arm平台,所以就需要用到一些跨平台的开发工具,主要是开发使用的系统Ubuntu (linux系统的一种)、交叉编译链、内核kernel的源码、boot loader。
2.1 Ubuntu系统的搭建
准备一个虚拟机以及一个Ubuntu的系统镜像,可以去官网下载,在你的工作电脑中安装一个虚拟机,把Ubuntu安装在虚拟机上,具体安装步骤这里不做概述了。
2.2 搭建交叉编译环境
安装好Ubuntu后,因为你是在工作电脑上是x86架构,所以你要在你的电脑上编译出arm架构运行的软件,就需要交叉编译器了,这里后续你要编写应用程序也是类似的道理,需要编译什么架构的程序就要选择对应的交叉编译器。
那么去那里下载这个交叉编译器呢,一般都会在你的芯片厂家的官网都会提供,或者可以找公司的代理商要。
不同厂家的交叉编译器会不同,根据要编译的CPU选择对应的交叉编译器;初次配置好交叉编译器后,你再次编译该厂家的系统就不需要重新编译了。
配置交叉编译器本质就是:把交叉编译器下载,修改文件权限解压到一个文件夹,再把该文件夹的路径配置到环境变量中即可;控制台输入 vim ~/.bashrc ,在文件最后添加 export PATH=${PATH}:~/aa158_ubuntu_source/ubuntu/build/gcc-linaro-aarch64-linux-gnu-7.3.1-2018.05/bin(冒号后面是你解压的环境变量bin文件的路径);
然后再新一行添加 export ARCH=arm (arm是你CPU的平台,这里是告诉make命令要编译的是什么平台以及多少位的系统,arm就是表示32位,arm64就是64位);
接着再添加一行添加 export CROSS_COMPILE=aarch64-linux-gnu-(aarch64-linux-gnu-是第二步你配置好的交叉编译器的前缀,告诉make文件使用什么编译器编译)这个前缀可以到你的交叉编译器bin文件夹里查看,如下图所示:
在make的时候会执行makefile文件,该文件会寻找ARCH和CROSS_COMPILE的信息进行配置,所以需要配置该信息,这两步也可以先不配置,编译的时候再进行选择即可,配置后如下图所示。
接着使用 source ~/.bashrc 命令使环境变量生效,然后输入 arm-linux- 再按几下 Tab 键即可查看是否设置成功。
然后输入 gcc -v 指令即可查看软件配置和版本信息了。
2. 3 获取内核kernel
对于 kernel 的获取,我们一般有三种获取方式:①直接去 kernel 官网下载、②CPU芯片厂家官网下载、③开发板官网下载。方法①可以获取到最新的kernel版本信息,不过弊端也很明显就是你获取到后还要自己添加对应CPU的板载信息(BSP),这部分工作比较麻烦,所以一般不建议使用这个方法;方法②的好处就是厂家已经对源码配置了板载信息,你只需专注于内核驱动的开发即可;方法③一般用于你的案子是参考开发板开发的时候去获取,你参考开发板开发硬件的时候,一些硬件信息跟开发板是类似的,这样你去找开发板的源码可以省下一部分硬件驱动添加的时间,而且还可以用开发板做对比测试;这里从开发便捷性以及效率来说,建议优先顺序考虑 ③ > ② > ① ,下载后把源码保存在你的上面安装好的Ubuntu系统中。
2.4 获取启动加载器 Boot loader
获取启动加载器跟获取 kernel 的方法一样,u-boot 是目前市面上使用最多的 Boot loader 这里后续都是以 u-boot 作为说明为主。u-boot 是德国开发的,支持多架构的加载器,而且开源免费,选择 u-boot 的时候要注意不要选择太新的,也不要选择太旧的。