linux设备驱动学习(一):内核的相关基础概念

                一.linux设备驱动的作用

Linux内核:        用于管理软硬件资源,并提供运行环境。

linux设备驱动:是连接硬件和内核之间的桥梁。

linux系统按个人理解可按下划分:

应用层:包括POSIX接口,LIBC,图形库等,用于给用户提供访问内核的接口。属于用户态,ARM运行在用户模式(usr)者系统模式(sys)下。

内核层:应用程序调用相关接口后,会通过系统调用,执行SWI令切换ARM的工作模式到超级用户(svc)模式下,根据用户函数的要求执行相应的操作。

硬件层:硬件设备,当用户需要操作硬件时,内核会根据驱动接口操作硬件设备

图结构如下:


.内核代码树介绍

linux-2.6.29

|-arch ---------------------------包含和硬件体系结构相关的代码

|-block --------------------------块设备的通用函数

|-firmware -----------------------固件,如BOIS

|-Documentation ------------------标准官方文档

|-dirver -------------------------linux设备驱动目录

|-fs -----------------------------内核所支持的文件系统

|-include ------------------------头文件.linux/module.h  linux/init.h常用库。

|-init ---------------------------库文件代码,C库函数在内核中的实现. init/main.c->start_kernel->内核执行第一条代码

|-ipc ----------------------------进程间通信

|-mm -----------------------------内存管理

|-kernel -------------------------内核核心部分,包括进程调度等

|-net ----------------------------网络协议

|-sound --------------------------音频ALSA驱动相关

其中,跟设备驱动有关并且经常查阅的文件夹有:

init

include/linux, /asm-arm

drivers:

arch:

.Makefile和 Kconfig

对于内核,Makefile分为5类:

Documentation/kbuild/makefiles.txt描述如下:

50 The Makefiles have five parts:

51

52 Makefile                      Makefile,控制内核的编译

53 .config                       内核配置文件,配置内核时生成,如make menuconfig

54 arch/$(ARCH)/Makefile         对应体系结构的Makefile

55 scripts/Makefile.*            Makefile共用的规则

56 kbuild Makefiles              各子目录下的Makefile,被上层的Makefile调用。

先大概描述一下内核的编译过程: 

首先配置内核,使用如下四命令之一:

        make config(依据文本的最传统配置界面,不推荐使用)

        make menuconfig(基于文本菜单的配置界面,推荐)

        make xconfig(需要安装QT)

        make gconfig(需要安装GTK+)

运行 make menuconfig后,出现如下界面:


配置工具首先分析与体系结构相对应的/arch/xxx/Kconfig文件,xxx通常为x86,arm等.

这个Kconfig文件除了本身包含一些体系结构相关的配置项和菜单之外,还source了一系列Kconfig文件,而这些Kconfig文件继续

source其他Kconfig文件,层层递归,配置工具根据这些Kconfig即可描绘出Linux的分层结构.


执行make menuconfig选择好配置项之后,配置工具会生成一个一个.config文件,而这个文件记录了一些编译宏的值,如下:

==============================================================================================================

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.36
# Sun Jul 31 05:18:24 2011
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y

...

==============================================================================================================

细心爱专研的同学可能会发现了,这个文件和 kernel/arch/xxx/configs 下边的 xxx_defconfig 内容差不多,

实际上arch/xxx/configs/xxx_defconfig是一个默认的的配置文件,

知识补充:

1. 如果kernel根目录.config不存在,运行make config/menuconfig时的默认设置由固化在各个Kconfig文件中各项目的默认值决定。
2. 如果.config存在,运行make config/menuconfig时的默认设置即是当前.config的设置,若对设置进行了修改,.config将被更新。
3. arch/arm/defconfig是一个默认的配置文件,make defconfig时会根据这个文件生成当前的.config。
4. arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。
5. make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config。


通常.config的内容会比xxx_defconfig 多,这是因为在make menuconfig的时候,会有很多的通用的不需要选择的默认配置加入.


有了.config,执行make之后,简单来说,编译内核会把这些值赋给Makefile 文件的宏(其实赋值不准确,其实就是一个东西),这样从根目录下的Makefile文件进行层层递归编译.


抛去Kconfig和Makefile的语法不讲,Kconfig 和Makefile的作用如下:

Kconfig:

     1.makemenuconfig下可以配置选项;

     2..config中确定CONFIG_XXX的的值。

  为用户提供一个交互界面来选择如何配置并生成配置选项,

    目标产物 .config


Makefile:

     根据.config编译.c为.o, 并最终生成kernel编译产物 zImage.


总结

1一般我们会先将一份defconfig默认配置copy到内核跟目录下并改名为.config

2.make menuconfig

1 由总Makefile决定编译的体系结构(ARCH).编译工具(CROSS_COMPILE),并知道需要进去哪些目录进行编译。

2arch/$(ARCH)/Makefile,决定arch/$(ARCH)下还有的哪些目录和文件需要编译。

3知道了需要编译的目录后,递归的进入哪些目录下,读取每一个Kconfig的信息,生成了图形配置的界面。

4通过我们在图形配置界面中选项为[*][M]或者[]

5保存并退出配置,会根据配置生成一份新的配置文件.config,并在同时生成include/config/auto.conf(这是.config的去注释版)。文件里面保存着CONFIG_XXXX等变量应该取y还是取m.

3.make

根据Makefile包含的目录和配置文件的要求,进去个子目录进行编译,最后会在各子目录下生成一个.o或者.a文件,然后总Makefile指定的连接脚本arch/$(ARCH)/kernel/vmlinux.lds生成vmlinux,并通过压缩编程bzImage,或者按要求在对应的子目录下编译成模块


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值