zoukankan      html  css  js  c++  java
  • 慢慢学Linux驱动开发,第十二章,加入内核

    // 在Linux内核中增加程序需要完成以下3项工作
    1.源代码复制到Linux相应目录下
    2.在目录的Kconfig文件中增加新源代码对应项目的编译选项
    3.在目录的Makefile文件中增加对新源代码的编译条目


    以下以LED驱动为例说明:

    1.将led.c源代码复制到内核\drivers\char目录

    2.在目录的Kconfig文件中添加LED的编译配置选项

    config LED
    bool "LED driver"
    depends on ARCH_S3C6410
    help
    LED driver for the samsung s3c6410

    上述Kconfig文件意味着只有在ARCH_S3C6410项目被配置的情况下,才会出现LED配置项目,这个项目为布尔型(要么编译入内核,要么不编译,选项为Y或N)菜单上显示的字符串为“LED driver”,help后面的内容为帮助信息。

    对内核进行配置是为了得到内核配置文件.config。通过对内核进行配置,可以使未来编译成功的内核增加或减少对一些内核特性的支持。对内核进行配置有多种方法,有基于文本的配置方式也有基于图形的用户界面。下面采用使用比较广泛的make menuconfig方式:

    sudo apt-get install libncurses5-dev

    sudo make menuconfig

    除了布尔型的配置项目外,还存在三态型(tristate)配置选项,它意味着要么编译入内核,要么编译为内核模块,要么不编译,选项为Y、M或N。

    在目录的Makefile中关于LED的编译脚本为:

    obj-$(CONFIG_LED) += led.o

    上述脚本意味着如果LED配置选项被选择为Y或N,即obj-$(CONFIG_LED)等同于obj-y或obj-n。

    此时确保内核目录已经make zImage过了,一次即可,在make modules,即可编译模块代码。

    编译内核包含两部分的工作,其一是编译内核,即编译配置选项中标记为Y的那部分,这部分内核最终形成bzIamge镜像文件;其二是编译内核模块,即编译配置选项中标记为M的那部分内核,这部分形成以.ko结尾的内核模块目标文件。

    上述两部分编译工作可以依次通过make bzImage和make modules完成,也可以通过一条make命令直接完成。编译内核的整个过程比较漫长,因此可以对make加-j参数来提高编译的效率。在make时使用该选项会为编译过程分配n个并发任务,这样可以缩短编译时间。n的取值为cpu个数的二倍。

    sudo make -j4

    ------------------------------------------------------------------------------------------------------------------

    作者:庞辉

    出处:http://www.cnblogs.com/pang123hui/

    本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).

  • 相关阅读:
    通过欧拉计划学Rust编程(第500题)
    通过欧拉计划学Rust编程(第54题)
    刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?
    用欧拉计划学Rust编程(第26题)
    通过欧拉计划学习Rust编程(第22~25题)
    用欧拉计划学Rust语言(第17~21题)
    用欧拉计划学习Rust编程(第13~16题)
    用欧拉计划学Rust语言(第7~12题)
    通过欧拉计划学Rust(第1~6题)
    《区块链生存训练2.0》PDF
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2390801.html
Copyright © 2011-2022 走看看