第四章:构建嵌入式Linux操作系统

4.2Linux内核子系统

1)进程管理,进程是操作系统中非常重要的概念!

#进程是操作系统分配资源的基本单位,也是CPU调度的基本单位!

进程的三个状态:就绪状态、执行状态、阻塞状态【汽车过红绿灯,等待绿灯时候就表示阻塞状态、是绿灯了,前面的车已经开始跑起来了,处于就绪状态,你的车也跑起来了,处于执行状态】

2)内存管理,内存是计算机重要资源之一!

将内存理解成一个线性的存储结构(条形柜子) 内核提供一个重要内存管理函数:kmalloc() kfree()
C函数库里的内存管理函数:malloc() free() 因为驱动开发不能使用C库函数,所以malloc()
free()不适用于我们的驱动开发,所以内核就提供特有的处理函数kmalloc() kfree() 3)文件系统
从用户角度看的,文件总以树形结构显示给用户! ”树的根“是什么? 就是 / (根目录)
///在Linux中,几乎每一个对象都可以当做文件来看待!!!~ 4)设备管理 设备的主要任务是完成数据从设备到内存的传输。
采用文件方式进行管理这些设备 5)网络功能

=====================================================================================
4.3Linux源代码结构分析 为什么要对Linux源代码进行分析?

答:对于开发者来说,主要原因就是可以模仿其他的驱动程序来写出新的驱动程序;还可以修改原有的驱动程序。
1)arch目录:包含与体系结构相关的代码! ///就是把不同体系结构(如:arm、x86、mips…)的代码放到arch这个文件夹下
2)drivers目录:跟驱动相关的代码! ///包含驱动的大部分代码,每个驱动程序占用一个子目录! 3)fs目录:
filesystem,包含里Linux所支持的所有文件系统相关的代码 4)其他的目录 //include目录:包含编译需要的头文件
//init目录:内核的初始化代码 //ipc目录:进程间通信的代码 //kernel目录:内核最核心的代码,包括进程的调度、内存管理等
//lib目录:包含库模块代码 //mm目录:独立于CPU体系结构的内存管理代码 //net目录:包含各种网络协议
//block目录:块设备驱动程序 //…

=====================================================================================
4.4内核配置选项之配置编译过程 为了解决手动配置编译内核困难,提出来一套优秀的机制,这个机制由以下几部分组成:
1)Makefile文件:方便编译,省去大量劳动力
2)Kconfig文件:为用户提供了一个层次化的配置选项集。 //make menuconfig命令,构建配置界面
3)配置文件(.config文件):配置OK后,把信息保存到.config文件里
4)配置工具 make menuconfig make config make xconfig

4.4内核配置选项之常规配置
1)常规配置选项:包含了一些通用的配置
2)版本信息:linux-2.6.39 2是主板号;
6是发行的版本号;39附加的版本信息 ====================================================================================
4.4内核配置选项之模块配置
4.4内核配置选项之块设备层配置
4.4内核配置选项之CPU类型和特性的配置
4.4内核配置选项之电源管理的配置
4.4内核配置选项之总线的配置
4.4内核配置选项之网络配置
4.4内核配置选项之设备驱动的配置
4.4内核配置选项之文件系统 … 以上所有的配置,都是在make menuconfig里进行设置的!~

===================================================================================
4.5嵌入式文件系统基础知识

1、嵌入式文件系统:为了应付不同的文件系统,Linux这边引入了虚拟文件系统(VFS),为各类文件系统提供一个统一操作界面和编程接口!~
///Linux的文件系统结构,共有4层:用户层、内核层、驱动层、硬件层!~ 用户层:文件系统目录
内核层:由于我们文件系统比较多,采用VFS虚拟文件系统来管理这些文件系统!~ 驱动层:块设备驱动…
硬件层:具体到某个硬件:比如内存、闪存… 2、嵌入式系统的存储介质 目前主流的两个存储介质:NOR FLASH 和 NAND
FLASH 两者区别:NOR 读快,写慢,擦除慢;NAND 读慢,写快,擦除快!~
3、JFFS文件系统:全称:日志闪存文件系统,用于NOR型flash存储器
//特点:可读写、支持数据压缩、基于哈希表的日志型文件系统,掉电保护等…
4、YAFFS文件系统:专门针对NAND FLASH 存储器设计的,存储空间比较大 //优点:速度快、占用内存少、不支持压缩、只支持NAND FLASH

4.6构建根文件系统
///内核启动后第一件事从存储设备中找根文件系统(PC机的启动方式:U盘启动、硬盘启动…)
1、根文件系统概述!~
///根文件系统存放系统启动必须的文件和程序:用户界面的shell程序、应用程序依赖的库、配置文件等。
2、Linux根文件系统目录结构!【是以树形结构来组织目录和文件的结构】
//bin:存放用户可以使用的基本命令。
//sbin:存放必须要系统管理员的命令,只有管理员才能使用!~(诸如:insmod\rmmod)
//boot:包含了引导加载程序使用的静态文件
//root:根用户的目录,root;
//home:普通用户的目录;
//etc:存放各种系统配置文件;(更新源 /etc/apt目录下)
//dev:设备文件和一些特殊的文件。(摄像头设备文件: /dev/video0)
//opt:包含附加的软件。(安装Linux版本的qt,这时候安装路径可放在/opt下)
//mnt:挂接目录,用来挂载暂时需要用到的文件系统(共享文件夹就放在/mnt/hgfs里)
//lib:存放共享库和一些驱动程序模块。支持我们的/bin /sbin里的文件
//proc:空目录,作为proc文件系统挂接点
//tmp:空目录,存放临时文件用的!~
//usr:存放共享、只读的文件和程序
//var:存放可变的文件,比如系统日志,临时文件…
3、BusyBox构建根文件系统

一般来说构建根文件系统:1)下载相应的命令源码;2)使用开源的工具构建根文件系统 1)BusyBox是一个用来构建根文件系统的工具。
2)BusyBox实现许多命令:比如说:cat、find、cp、tar、ps、ping、kill…
3)BusyBox构建根文件系统的步骤:
1、从http://www.busybox.net/downloads下载BusyBox相应版本,拷贝到共享文件夹下; 2、cp
/mnt/hgfs/VmShareFile/busybox-1.20.0.tar.bz2 . 【最后一个“."表示的是当前目录】
//把共享文件夹里的BusyBox压缩包拷贝到Ubuntu里: 3、tar jxvf busybox-1.20.0.tar.bz2
//解压BusyBox压缩包 4、cd busybox-1.20.0 //cd到解压后BusyBox文件夹内
5、make menuconfig //进行BusyBox的配置!~ 6、make //BusyBox的编译
7、make install //BusyBox的安装 8、cd
_install //进安装好的BusyBox文件内 9、ls //查看_install内容,发现里面就bin linuxrc sbin usr四个文件
//明显不符合根文件系统的要求,所以进行人为操作,手动添加一些目录 10、mkdir bin sbin lib etc dev sys proc tmp var opt mnt usr home root media
//手动创建一些根文件目录 11、cd etc //进etc目录,发现里面内容不符根文件系统要求 12、touch inittab fstab profile passwd group shadow …

你可能感兴趣的:(linux驱动开发详解)