linux 移植概述
所谓移植,主要任务:搭建自己的交叉编译环境,编译制作bootloader, 编译制作内核镜像,编译制作根文件系统,烧写到目标板。
1.
关于搭建交叉编译环境,其实就是制作交叉编译工具链toolchain。就是用pc上的编译器,编译产生目标板的编译链接工具。
需要准备相关的很多源码,大体分为编译工具和lib和include库两类,比如glibc, binutils, gcc (目标板),crosstool(制作用脚本)等。要注意版本,合适的cross toolchain是进行后续工作的基础。
2.
制作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格式。