【嵌入式驱动三】内核配置和编译

相关文章链接:
【嵌入式驱动一】嵌入式驱动开发的前期准备(上)
【嵌入式驱动二】嵌入式驱动开发的前期准备(下)
【嵌入式驱动三】内核配置和编译


文章目录如下所示,如果有感兴趣的章节,请移步到我的个人博客,本篇文章链接为https://www.keepgoingwang.com/2019/06/24/嵌入式驱动开发-2/,您的支持是我坚持的最大动力,谢谢!

内核配置和编译

一、内核配置

之前我们搭建好了交叉编译链,准备好内核源代码,我们就可以编译了。

我用的是3.0.35版本的内核。外链图片转存失败
使用如下命令解压缩内核文件

tar xvf linux-3.0.35.tar.bz2

解压完成后能看到内核文件夹下的各个文件夹,各个文件夹都包含特定的文件:

  • arch目录
    arch目录包括了所有和结构体相关的核心代码。它的下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。

  • include目录
    include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。

  • init目录
    init目录包含核心的初始代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。

  • mm目录
    mm目录包含了所有的内存管理代码。与具有硬件体系结构相关的内存管理代码位于arch/*/mm目录下。

  • drivers目录
    drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。

  • ipc目录
    ipc目录包含了核心进程间的通信代码。

  • modules目录
    modules目录存放了已建好的、可动态加载的模块。

  • fs目录
    fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。
    kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。

  • net目录
    net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。

  • lib目录
    lib目录包含了核心的库代码,不过与处理器结构相关的库代码放在arch/*lib/目录下。

  • scripts目录
    scripts目录包含用于配置核心的脚本文件。

  • documentation目录
    documentation目录下是一些文档,是对每个目录作用的具体说明。

在内核代码的根目录下有一个.config的文件,这个文件就是内核的配置文件,在配置内核的时候可以直接修改这个文件还可以使用make menuconfig修改,接下来介绍这两种方法:

  1. 直接修改.config文件
    如果熟悉各个驱动模块,我们可以直接找到相应的驱动,配置成‘y’、‘m’或者直接删除。这里的‘y’表示将该驱动之间放进内核,属于静态加载;这里‘m’表示动态加载驱动,需要我们手动加载驱动,我们下面会讲;将该驱动删除意思我们不需要这个驱动,将其删除。以按键驱动为例,它在.config文件中的配置为外链图片转存失败(img-qI0sxyRU-1562575561404)
    我们看到按键驱动配置为‘y’,也就是说直接将按键驱动编译进内核。那么,我们将‘y’修改为‘m’,我们将把按键驱动以模块的形式编译,这样需要我们手动加载,这样做的好处是内核不臃肿,内核中只包含必须的驱动,不是必须的我们视情况手动加载。
  2. 使用可视化界面
    在Linux内核文件目录下执行make menuconfig命令,我们会看到如下界面:
    外链图片转存失败(img-yd189vJc-1562575561405)
    这个界面就是内核的配置界面。
    我们同样找到按键驱动外链图片转存失败(img-4Dn1G8PT-1562575561406)
    但是驱动的名和直接修改.config文件中的名不一样(在以后讲解)。但是我们使用“?”查看帮助信息外链图片转存失败(img-D348pNE8-1562575561407)
    确实是CONFIG_KEYBOARD_GPIO,所以是我们要找的按键驱动。
    在可视化界面下,我们找到要设置的驱动,选中后点击“回车”键,驱动前的选项会在“”、“M”和空三个中变化。其中“”表示编译进内核;“M”表示以模块的方式编译;空表示删除不编译该驱动。

二、内核的编译

在配置好内核后,执行如下命令编译内核(也有可能不是uImage,可参考资料)。

make uImage

待内核编译完成后(第一次编译时间可能稍长),再执行如下命令,编译以模块形式编译的驱动。

make modules

编译结束后,内核文件在内核源代码中的arch/arm/boot/目录下
外链图片转存失败(img-qYXxs9ju-1562575561408)
以模块方式编译的驱动,编译完成的.ko文件在相应的源代码的目录下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值