Linux系统移植概述及环境搭建
嵌入式系统的核心是定制
1.搭建自己的编译环境
关于搭建交叉编译环境,其实就是制作交叉编译工具链toolchain。就是用pc上的编译器,编译产生目标板的编译链接工具。
需要准备相关的很多源码,大体分为编译工具和lib和include库两类,比如glibc,binutils,
gcc (目标板),crosstool(制作用脚本)等。要注意版本,合适的cross
toolchain是进行后续工作的基础。
2.编译制作bootloader
制作bootloader,bootloader主要完成硬件初始化,自搬移,加载操作系统几方面的工作,整个u-boot的源码包含了很多个平台的支持,通过make
XXX_config设置,使得编译时选择相应部分的源码。可以根据自己的具体需求,对参与编译的相应部分进行删改,使得bootloader符合要求。
3.编译制作内核镜像
编译制作系统镜像,同样,下载来得源码包通常也是包含多种平台支持的,通过修改Kconfig文件和menuconfig配置,确定对平台的支持,通过对内核模块的增减来适应自己开发板,是生产的内核最精简。
4.编译制作根文件系统
只有内核,通常还是不够的,一个比较完备的应用,通常还需要文件系统,linux的工作方式是把分区挂载到目录,所以我们通常需要一个根文件系统rootfs,常见的根文件系统很多,制作过程后面补充。
一个根文件系统可以从内容和格式两方面来理解它,内容包括了可执行文件,运行时的脚本,设备文件等;有一定格式是实际烧写到外存的需要。制作内容可以使用busybox来生成常用命令(就是linux非常熟悉的/bin
/sbin /usr/bin /usr/sbin里面的东西),创建根文件系统目录,如sys
etc dev proc var tmp root lib; 按照一定的格式编写启动脚本,比如rcS
inittab fstab profile等;mknod创建/dev/console
/dev/null;把编译busybox和内核的交叉编译工具链的lib里的可执行库中的内容拷贝到文件系统的lib里(一定要对应版本)。制作为一定的格式的镜像,要制作好得文件系统内容和一定的制作工具,可以用linux自带的工具制作成cramfs格式,可以用开源工具mkdfs.jffs2制作成jffs2格式。
嵌入式Linux交叉开发环境硬件组成
1.开发主机
2.目标机
3.连接介质(RS232串口,网线)
串口控制开发板
电脑编译生成bin文件,网线下载到开发板
板子上电时候会加载bootloader,电脑下载bootloader时,通过串口输出信息
开发板启动流程
bootloader---→kernel---→applicaton
搭建嵌入式Linux开发环境主要工作
1.准备开发主机,目标机,以及二者连接介质
2.准备目标机代码
3.安装交叉工具链
4.开发主机上安装的软件(方便调试)
5.终端软件(putty,minicom)
6.tftp服务(内核)
RAM
7.nfs服务
(根目录系统)
RAM
8.目标机安装(u-boot烧写调试)
sd卡方式
Fastboot方式(成功后,板子有串口信息输出)ROM
9.主机和目标机能连通
10.网络自动tftp加载内核,并挂载nfs
roots启动
通过网络引导(tftp、nfs)
android刷机流程
1、进入fastboot模式
adb
reboot bootloader
2、刷机
指定分区
擦除android
boot分区
fastboot
erase boot
给system分区写入system.img文件
fastboot
flash system system.img
android编译
在android源码根目录下
1.
source build/envsetup.sh #这个脚本用来设置android的编译环境;
2.
lunch #选择编译目标
1.
aosp_arm-eng
2.
aosp_arm64-eng
3.
aosp_car_arm-userdebug
4.
aosp_car_arm64-userdebug
5.
aosp_car_x86-userdebug
6.
aosp_car_x86_64-userdebug
7.
aosp_cf_arm64_phone-userdebug
8.
aosp_cf_x86_64_phone-userdebug
9.
aosp_cf_x86_auto-userdebug
10.
aosp_cf_x86_phone-userdebug
11.
aosp_cf_x86_tv-userdebug
12.
aosp_x86-eng
13.
aosp_x86_64-eng
14.
m_e_arm-userdebug
15.
mini_emulator_arm64-userdebug
16.
mini_emulator_x86-userdebug
17.
mini_emulator_x86_64-userdebug
18.
msm8909-userdebug
19.
msm8909go-userdebug
20.
msm8937_32go-userdebug
21.
msm8996-userdebug
22.
msm8998-userdebug
23.
poplar-eng
24.
poplar-user
25.
poplar-userdebug
26.
qemu_trusty_arm64-userdebug
27.
qssi-userdebug
28.
sdm660_32-userdebug
29.
sdm660_64-userdebug
30.
sdm845-userdebug
31.
uml-userdebug
3.
make #编译android整个系统
进入指定目录mm
mmm指定目录
make
bootimage -j4 #编译boot生成bootimag
make
-j 8:该指令通过-j参数来设置参与编译的线程数量,以提高编译速度。
4.mma:当前目录新增或删除文件后,可以用mma重新编译。
以上三个命令都可以用-B选项来重新编译所有目标文件。