linux移植过程概述(linux移植的全局认识并非step by step的教程)

本文简述一下对linux移植过程的全局认识并非step by step的教程
想让linux在一个板子上跑起来需要做什么?
需要做三件事
1.移植uboot适配板子 2.调试kernel中各类驱动 3.构建根文件系统

为什么需要uboot?
内核虽然强大,但是不能开机自动完全从零开始启动的,内核启动还是需要别人帮忙的。
uboot为kernel启动创造各种条件,帮助内核实现重定位(从Flash到DDR ),给内核提供启动参数等等。
uboot移植需要做些什么?
a,修改相关硬件初始化代码,如时钟、MMU、cache、watchdog适配当前硬件平台。如arm9相关代码修改位置为:uboot\arch\arm\cpu\arm920t\start.S
b,开启cpu内部的存储管理器使得外部ram可用,初始化flash能够将uboot下一阶段代码加载进来。
c,设置堆栈调用c函数
d,(可选)修改、新增uboot中的命令,使用uboot可以启动内核、下载代码

kernel移植都需要做些什么
a,调试引导代码,需要修改的一般是汇编代码,位于kernel/arch/arm/mach-xxx/xxx.S(注:kernel/arch/arm/kernel/head.S文件是uboot将cpu控制权交到kernel后运行的第一个文件),使系统能够跑到kernel/init/main.c中的start_kernel()函数。
b,调试相关驱动程序,如Flash、网卡等等,使kernel可以正常启动。每个驱动的调试方法都是一个单独方向,在此不做展开讲解,可以查看本博客其他文章,也许会略有帮助。

c,kernel启动后就要挂载根文件系统,就是下一步的任务了

kernel编译后的Image、zImage和uImage各是啥?
编译完内核之后,一般会在arch/arm/boot目录下生成Image和zImage两个文件,其中Image是未经压缩的,而zImage则是经过压缩的。
uImage是U-Boot专用的,使用U-Boot的工具mkimage根据zImage制作而成

为什么需要根文件系统?
尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。
根文件系统是什么?
根文件系统就是开机后通过“ls /”看到的的所有文件、文件夹。“/”就是文件系统的根,其中放置了各类kernel必备的配置文件、与驱动相关的驱动节点文件、用户程序等等。
如何构建根文件系统?
当然可以手工建立最小根文件系统相关的各种文件、文件夹,如下:
/sbin
/lib
/etc
/dev
但我们可以通过一个好用的工具busybox来快速、省力的做这些必须的文件。
根文件系统如何被kernel使用?
在linux的第一个用户程序init中会去挂载根文件系统,调试期间可以使用nfs即网络文件系统,linux可以通过网络将你电脑的构建好根文件系统的文件夹挂载上使用。或者通过相关工具如mkyaffsimage将文件夹打包成image烧录到板子的flash中。

猜你喜欢

转载自blog.csdn.net/RadianceBlau/article/details/78333882