一、移植
根据硬件平台的差异,将代码进行少量的修改,修改过后的代码在目标平台上运行起来
移植还需要考虑硬件环境,驱动只需要考虑内核的环境
二、移植内容
1、移植Uboot
uboot属于bootloader的一种,还有其他的bootloader,如:arm-boot、red-boot、uboot、pmon、uefi
bootloader是系统上电之后执行的第一个系统软件,负责初始化硬件,负责加载引导操作系统。
2、移植Linux内核
1)获取Linux内核源码
官网: The Linux Kernel Archives
2)板子上操作系统与不上操作系统的区别
优点:可以更容易的实现较为复杂的业务逻辑
缺点:硬件的成本很高
3)Linux内核的核心功能
【1】进程间通信
【2】进程间的管理
给当前进程分配多少个时间片,给当前进程分配多少内存
【3】虚拟文件子系统
【4】网络子系统
【5】内存管理子系统
早期的内核版本:2.6版本(Red Hat4)
开发板中使用的内存版本是3.4版本
企业中使用最多的是4.19、5.10
3、移植根文件系统
1号进程[init]对应的程序就是根文件系统
根文件系统里面包含一些命令,例如
ls、cd、touch、rm。。。
我们可以通过busybox工具制作根文件系统,它已经集成了上述命令。
4、总结
移植三大系统软件,包括:
【1】移植uboot | 对应固件工程师(固化到硬件里的软件程序) | 例如:ESP8266WiFi模块,内部集成了TCP/UDP协议栈,是由乐鑫公司固件工程师实现的 |
【2】移植Linux内核 | 对应Linux内核工程师 | |
【3】移植根文件系统 | 对应系统集成开发工程师 |
5、目标
【1】熟悉uboot的源码,掌握uboot的编译方式
【2】掌握Linux源码的框架结构,掌握Linux内核裁剪方式,掌握Linux内核编译过程
【3】掌握根文件系统镜像的制作
三、开发板烧写
擦除emmc,并对其进行分区
1、实验前准备
【1】uboot
【2】Linux内核
【3】根文件系统的镜像
2、新建一个实验文件夹
3、将所需文件拷贝至实验文件
4、查看各文件大小,便于分区
1)查看uboot(引导内核)
看到ubootpak.bin只有336K,不到1Mb,可以在emmc开头位置分1Mb的空间给uboot
2)查看uImage(内核)
看到uImage有5.2Mb,但我们将来需要裁剪,并且还要添加很多的驱动模块,所以给内核分大一些,分64Mb
3)查看rootfs(根文件系统)
看到rootfs有100Mb,我们给它分大一些,比如800Mb
5、关于EMMC的分区
三星公司对于第二启动设备(EMMC)的分区有一个指定的命名
6、擦除emmc分区
7、对emmc进行分区
8、烧写uboot
1)上位机把ubootpak.bin拷贝到tftp共享目录
2)下位机下载uboot
3)下位机更新EMMC
4)下位机的ip地址
9、烧录uImage
1)上位机把uImage拷贝到tftp共享目录
2)下位机下载uImage
3)下位机写emmc
4)修改bootcmd环境变量
需要修改环境变量bootcmd,告诉uboot去哪里加载Linux内核
a、烧录根文件系统
1)上位机把rootfs_ext4.img拷贝到tftp共享目录
2)下位机下载rootfs_ext4.img
3)下位机写emmc
4)修改bootargs环境变量
需要修改环境变量bootargs,告诉Linux内核去哪里挂载根文件系统,以什么样的方式挂载根文件系统
四、通过nfs的方式挂载根文件系统
nfs的网络服务(Network File System)是由SUN公司研制的UNIX操作系统的表示层协议
OSI | TCP/IP |
应用层 | 应用层 |
表示层 | |
会话层 | |
传输层 | 传输层 |
网络层 | |
数据链路层 | 数据链路层 |
物理层 | 物理层 |
我们不把根文件系统放到开发板的EMMC中,而是将下位机的根文件系统部署在上位机中,这样做的好处:
【1】可以直接在上位机中修改下位机的根文件系统的内容
【2】不需要再重复的往下位机的EMMC中烧录根文件系统,延长EMMC的寿命
1、在PC机中配置nfs服务
2、修改nfs的配置文件
3、 修改nfs的服务文件
4、 修改下位机的bootargs环境变量
5、总结
用户名:root
密码:123456
由于是挂载的根文件系统,所以PC机在/nfs_share目录中创建的文件,在开发板的根中可以找到;在开发板的根中创建的文件,在PC机的/nfs_share目录中可以找到;在实际的嵌入式开发中,这种方式经常会用到,很方便。