内核模块开发

内核功能说明


Linux 是一种开源电脑操作系统内核。它是一个用 C 语言写成,符合 POSIX 标准的类 Unix 操作系统。

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在 Linux 的术语中被称为“内核”,也可以称为“核心”。Linux 内核的主要模块(或组件)分以下几个部分:存储管理、CPU 和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

内核文件说明


目录 备注
arch 内核所支持的每种 CPU 体系,在该目录下都有对应的子目录,分别包含控制系统引导,内存管理,系统调用等
block 部分块设备驱动程序
crypto 加密、压缩、CRC 校验算法
documentation 内核的文档
drivers 设备驱动程序
fs 存放各种文件系统的实现代码,每个子目录对应一种文件系统的实现
include 内核所需要的头文件
init 内核初始化代码
ipc 进程间通信的实现代码
kernel Linux 大多数关键的核心功能都是在这个目录实现
lib 库文件代码
mm 实现内存管理中与体系结构无关的部分
net 网络协议的实现代码
samples 一些内核编程的范例
scripts 配置内核的脚本
security SElinux 的模块
sound 音频设备的驱动程序
usr cpio 命令实现
virt 内核虚拟机

内核配置文件


内核配置可以说是最重要的部分,需要添加额外的设备驱动或者功能模块就需要额外配置内核文件。配置内核模块有两种方式:

  1. 直接修改对应的配置文件,本工程的内核模块的配置文件路径为根目录下:arch/arm/configs/imx6solo_artoo_defconfig。打开文件可以看到里面包含了很多的配置信息。y 表示模块驱动编译到内核中,启动时自动加载。m 表示单独编译成模块的方式,即不会被编译到内核中,需要动态加载。内容部分截图:

  2. 图形化界面生成配置文件,这种方式比较直观,优先选择。执行命令顺序为:export ARCH=armmake imx6solo_artoo_defconfigmake menuconfig。只需要根据相应的选项操作即可,最后选择 Save 选项完成相应的修改写入配置文件。界面主页内容截图:

生成内核和网卡模块


不修改任何文件即可生成内核镜像文件:uImage。编译后的内核镜像目录路径在根目录下:arch/arm/boot/。编译后的功能模块目录路径在根目录下:mod_install/。执行根目录下的:build.sh 运行脚本即可完成内核和模块的编译。但是要确认 build.sh 脚本内容,完成以下步骤:

  1. 需要添加 u-boot 工具路径到全局变量,确认 export PATH=(u-boot目录路径)/tools:$PATH

  2. 下载交叉编译工具,解压到相应目录下,确认 export CROSS_COMPILE=(交叉编译工具路径)

  3. 确认需要编译配置文件,例如 make imx6solo_artoo_defconfig

  4. 添加文件系统核心到配置文件,在 imx6solo_artoo_defconfig 120: CONFIG_INITRAMFS_SOURCE="(具体路径)/rootfs.cpio",文件在内核工程根目录下;

  5. 最后运行脚本命令:./build.sh

因为内核并没有提供所用网卡的驱动支持,所以网卡模块需要进行额外的编译。网卡模块的目录路径在根目录下:backports-20150903/。生成网卡驱动模块也十分简单,已经有编写好的 build.sh 运行脚本,同样要确认 build.sh 脚本内容,需要完成以下步骤:

  1. 确认交叉编译工具路径,export CROSS_COMPILE=(交叉编译工具路径)

  2. 添加内核目录,export KLIB_BUILD=(内核文件目录)

  3. 最后运行脚本命令 ./build.sh 之后会弹出图形化的配置界面,和配置内核模块的图形化界面一样,将所需要的功能选上即可,最后 save 。产生的模块在内核目录下,mod_install/

注意:需要下载的文件链接,都在数字链路系统开发目录有介绍。

results matching ""

    No results matching ""