简单的linux内核移植知识

Linux内核的移植(ARM)总结

虽然没有干过这个工作,不过听说内核移植从来就不是一个人的事。通常都是由一个百人的团队去做的,所以这里讲的仅仅是最简单的一些。往往不去关心原理,只是懂得如何操作罢了。

知识储备

在学习移植之前,需要知道的知识和概念,操作系统启动的过程,bootloader,内核,根文件系统等。

计算机结构:两层结构:软件,硬件。

四层结构:应用程序APP,中间件(动态库,静态库),os(内核,驱动开发),硬件

裸机程序:不需要操作系统可以直接运行在机器上的程序。

系统启动:cpu加电之后会运行一个裸机程序(由汇编c混合编写),裸机程序启动操作系统

Bootloader:最开始运行的那个裸机程序。有两种工作模式:1.启动加载模式,2.下载配置模式。默认是使用第一种,但是会留下等待时间,可以让我们通过按键进入第二种模式。

内核(kernel):就是操作系统的核心,具有管理软硬件资源,为应用程序提供运行环境。

根文件系统:应用程序数据的存储系统。

也许知道了这些你还是云里雾里,不过下面你就会很容易理解uboot了。

交叉编译器:pc中使用的cpu一般是x86系列,而开发板中的cpuarm,所以在pc上能够运行的linux程序,不能在开发板上的linux系统中运行。交叉编译器就是在x86上安装一个arm的编译器,通过在pc上编译好,在传到arm开发板中运行。

一、 Uboot

什么是uboot呢,它是一个BootLoader程序,遵循GPL的开源项目。支持x86armpower等多种芯片。支持linuxnetBSDvxWork等多种操作系统内核。可靠稳定。

因为uboot并不是直接就可以拿到开发板上使用的,需要配置、编译、链接过程。

配置ubootmake boardname_config , make all

比如S3C2440开发板 make smdk2440_config

比如S5PV210开发板 make timy210_config

其中在源代码下面的board中包含开发板的种类。第一层目录是公司,第二层才是开发版的型号。

完成之后会生成uboot.bin文件,这就是可以直接烧录到ROMflash中的二进制可执行文件

编译好了之后,还会生成一些工具mkimage,帮助生成uboot认识的uimage

Uboot使用的命令:

  1. 帮助命令help
  2. 下载命令,串口操作:loadbloadsloadxloady;利用tftp协议操作:tftpbootnfs协议:nfs
  3. 内存操作命令,md(查看内存命令)cp(复制)
  4. nor flash操作命令
  5. Nand flash操作命令 nand info 查看nand的信息。

                     Nand erase 擦除flash的信息

Nand write

Nand read

  1. 环境变量命令setenv name value。拷贝完成内核需要设置一下,下次启动就可以自动的运行内核。
  2. 启动命令bootm

通过使用串口或者使用sd卡或者使用网络就可以把数据传到开发板上。然后放入合适的位置,reboot就可以了。

通过uboot,可以把内核放到内存中,然后启动。

二、 内核分析

Linux内核的基本信息。

如何获取到Linux内核源码,www.Kernel.Com.

下载下来之后解压,目录格式为:

操作系统,给应用程序提供运行环境的裸机程序。。

任务管理  内存管理 设备管理 网络管理 文件系统 启动管理

linux内核源码

kernel 多任务,多线程,多进程

ipc 进程间通信的代码

mm 内存管理

net 网络管理,tcpip协议栈就在这个里面。。。

fs  文件系统

drivers 驱动程序

block 块设备(外存等大规模的存储上设备)

sound 声音的框架

init 初始化

arch 体系结构,计算机体系结构

Documentation 帮助文档

sample 例子,常用的系统调用函数

scripts 脚本

lib 各个模块的工具函数

crypte 加密解密的算法

如何编译内核?

  1. make distclean清空数据
  2. Make menuconfig,配置内核
  3. Make 编译。

最后可以在arch/芯片/下找到一个zImage的文件,这就是最终生成的内核程序。

使用uboot编译出来的工具,制作成uimage

三、 根文件系统的制作。

什么是根文件系统,内核启动后的第一个程序,给用户提供操作界面的shell程序,应用程序所依赖的库。这些必需的基本的文件合称为文件系统。

Linux下面的目录

Bin目录:该目录下面放了所有用户都可以使用的,基本的命令,在挂载其他的文件系统时就可以使用,必须和文件系统在同一个分区。

Sbin目录:存放的super用户可以使用的命令。

Dev目录:存放设备文件的。在Linux下面所有的设备都是通过文件来访问的。设备文件分为两种,一种是字符型设备文件(传输的是字符流),另一种是块设备文件(用来存储大量的数据)

Etc目录:各种应用,程序的配置文件。

Lib文件:存放共享库和可加载模块。Linux下面的动态库 *.so

Home目录:用户目录

Root目录:super的目录

Usr目录:存放共享的文件,一般是不回去修改的文件

Var目录:存放的是会改变的文件

Proc目录:是一个虚拟的文件系统

Mnt目录:临时挂载点

Tmp目录:存放临时文件的目录

使用busybox

Busybox是一个unix命令集合。

首先,使用命令设置需要编译的命令,也可以使用默认的配置,makedefconfig或者图形结脉make menuconfig

然后修改makefile文件,修改arch,修改交叉编译器。

Arch = ram      交叉编译器是 arm-linux-           系统会自动加上gcc

配置完成之后使用make进行编译。

编译完成之后就有一个二进制程序,可以使用命令make install + 路径

安装到这个路径下面make install CONFIG_PREFIX=/nfsroot,就把busybox安装到nfsroot中。

Busybox是使用c语言写的,所以还需要c语言的库

把所有的文件都放在nfsroot/lib中。这个时候就有了shell环境

nfsroot中创建一些文件夹。

原文地址:https://www.cnblogs.com/qiny1012/p/8603972.html