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

  • 相关阅读:
    Appium [安装包] Appium 国内下载地址 (百度云盘,已更新至 AppiumDesktop_1.7.1)(转载)
    PLSQL 触发器
    Java解析Json数据的两种方式
    easyui combobox 动态加载数组数据
    js控制easyui datagrid列的显示和隐藏
    Js中for循环的阻塞机制
    数据库中的视图
    严重:Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupListener
    eclipse背景设置什么颜色缓解眼睛疲劳之一
    Maven详解
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2390801.html
Copyright © 2011-2022 走看看