L13D10 Linux内核移植

一、Linux内核概述

(一)内核和操作系统

1、内核是操作系统的核心,内核是水果的核。

2、内核提供最核心的功能,内核是操作系统工作的基础,决定整个系统的性能和稳定性。

3、ubuntu是操作系统,内核是Linux。操作系统是在内核基础上添加了shell、库、应用程序等。

4、 shell不属于内核。shell会保护内核,通过命令间接操作内核,用户和内核的交流,不直接操作内核。

5、库函数是系统调用的接口,不属于Linux内核。

6、桌面管理器支持可视的界面,是操作系统加的。

(二)Linux内核的功能

1、进程管理

2、内存管理

3、文件系统:对上层提供接口,规定下层不同硬件

4、寄存器控制:寄存器配置

5、网络协议栈

操作系统是内核加一些简单的库和其他配置,不会有庞大的操作系统。

(三)Linux内核的特点

1、安卓-手机

wins-电脑

Linux不是专门为嵌入式设计的,但是是最适合嵌入式的。

2、微内核:内核+多模块,模块可以随意添加,但是耦合性低。模块之间的联系小,沟通不便。

宏内核:模块之间耦合性高,效率高,模块间沟通方便,一个模块出现问题,其他模块也会受到影响。

3、精简指令集处理器,支持丰富的硬件平台。

4、稳定性高,开机时间长,不会有什么改变。

5、轻量级,成本低,硬件配置低也可以运行,具有较强的裁剪性,没有用的功能可以裁剪。

6、除了嵌入式,95%服务器用Linux也很多,丰富的网络协议。

7、开源。更新活跃资料多。

二、Linux内核源码结构

(一)Linux获取

1、arch

不同公司不同系列芯片,本节用到的是samsung下的处理器(CPU级别)mach-exynos。

2、block

磁盘设备的支持

3、COPYING:版权信息

4、CREITS:内核贡献者

5、crypto:加密

6、readme:基础说明

7、Documentation:详细说明

8、drivers:驱动

i2c:驱动程序

9、firmware:固件

10、fs:文件系统,管理访问磁盘

11、inculde:头文件

12、init:Linux内核启动

13、ipc:Linux进程间通信机制

14、kconfig:图形化界面

15、kernel:内核的核心,核心调度算法

16、lib:库

17、Makefile:编译

18、mm:内存管理代码

19、net网络协议,可以部分编译

20、samples:示例

21、scripts:脚本工具

22、security:安全相关代码

23、sound:音频驱动

24、tools:使用Linux借助的工具

25、usr:压缩解压代码

26、virt:虚拟化相关代码

三、Linux内核源码配置

软硬件匹配,对用到的处理器对应的代码进行选择和配置。

(一)Linux内核源码配置

 

 (二).config的作用

 

内核编译赋值为y的变量对应的功能。被注释的功能不会被编译。

含y的变量越多,内核功能越强大,体积越大。

.config是默认配置,可能与实际情况不相符,手动修改内核配置。

没有用的功能可以手动注释。

四、Linux内核源码编译

(一)Linux内核源码编译方法

1、方法一

有可能会配置混乱,内核有很多功能具有依赖关系,随意修改会造成很严重的后果。

NFS->TCP/IP->DM9000网卡。

2、方法二

 配置Linux内核功能:

3、方法二的好处

1)方面寻找功能,掌握某个功能的作用。

2)自动检查和解决依赖关系。

(二)make menuconfig使用方法

1、Y:选中

2、N:不选中

3、?:help

4、/:搜索

5、使用make menuconfig的本质还是修改.config文件

(三)make menuconfig常用配置选项

1、设置交叉编译工具

2、内核压缩、进程通信

 

3、指定第几个串口

4、网络支持

以下是比较重要的三个

 

5、驱动设置

6、文件系统

 

(四) make menuconfig的修改设置

 *:和内核编译到一起,编译到uImage中。

M:编译成独立的模块,不需要重新编译uImage。

(五)uImage介绍

UImage介绍 UImage是为了配合uboot而定义的一种image格式。在原有的image基础之上,mkimage工具会自动添加一个64字节的头部信息供uboot启动系统来使用。模块的好处可以随意的加载和卸载,不对uImage产生影响。

五、Linux编译内核模块

(一)设备树介绍

Linux下的驱动驱动程序和硬件设施分离,驱动代码包括逻辑代码(怎么电灯)和硬件信息(点哪个灯,配置寄存器),逻辑代码放到drivers,硬件信息放到了设备树,硬件修改只需要修改设备树即可。

内核由两部分组成,逻辑代码放在uImage中,硬件信息放到了设备树中。Linux在运行时,将uImage和设备树都加载到内存。

设备树有源代码(不是C语言),编译成二进制代码,可以被加载到内存。

不同开发板设备树不同,开发板对应设备树,此时设备树对应的还是芯片厂家对应的评估板。

samsung对应的origen的设备树:

(二)编译设备树

 

六、Linux编译设备树

(一)编译内核

 编译成可以在CPU执行的,zImage再被加工成被uboot引导的uImage。

(二)编译模块

 .ko:内核模块后缀,可装可卸载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值