zoukankan      html  css  js  c++  java
  • linux驱动模块编写规范以及Makefiel文件的编写规范

    内核驱动模块的编写规范


    驱动模块一般涉及的必用的头文件:

    <linux/init.h>
    <linux/module.h>
    <linux/kernel.h>

    驱动模块的入口函数的规范:

    int __init entry_name(void)
    {
    /*xxx*/

    return 0;
    }

    module_init(entry_name);

    驱动模块的出口函数规范:

    void __exit exit_name(void)
    {

    }

    module_exit(exit_name);

    模块的信息的声明:

    MODULE_LICENSE("GPL"); //模块当中此行必须要写,下面三行可选
    MODULE_VERSION("版本");
    MODULE_AUTHOR("作者");
    MODULE_DESCRIPTION("对模块的描述");

    ===========================================================
    一个模块对应一个test.c那么,Makefile如下编写

    obj-m := test.o //

    KERNLE := /lib/modules/2.6.32-358.el6.i686/build/

    all:
    make -C $(KERNLE) M=$(shell pwd) modules
    clean:
    make -C $(KERNLE) M=`pwd` clean;
    rm -f *.order
    mymove:
    mv *.ko /nfsroot/

    ===========================================================
    一个模块对应对个.c,比如test1.c test2.c test3.c,Makefile如下

    obj-m := name.o
    name-objs := test1.o test2.o test3.o

    KERNLE := /lib/modules/2.6.32-358.el6.i686/build/

    all:
    make -C $(KERNLE) M=$(shell pwd) modules
    clean:
    make -C $(KERNLE) M=`pwd` clean;
    rm -f *.order
    mymove:
    mv *.ko /nfsroot/

    ==========================================================
    如果在一个单独的目录当中,一次用一个Makefile管理编译对个.c
    对应多个模块对应的.ko文件,比如,test1.c test2.c要编译生成
    两个单独的模块,那么Makefile如下编写:

    obj-m := test1.o test2.o

    KERNLE := /lib/modules/2.6.32-358.el6.i686/build/

    all:
    make -C $(KERNLE) M=$(shell pwd) modules
    clean:
    make -C $(KERNLE) M=`pwd` clean;
    rm -f *.order
    mymove:
    mv *.ko /nfsroot/

    =========================================================
    如果要在任意位置或者想智能的在插入某个模块时需要自动先插入
    被依赖的模块,就是说如果想用modprobe 命令插入模块,那么
    Makefile必须如下写:


    obj-m := test1.o test2.o

    KERNEL := /linux-millet-driver
    DEST_DIR := /nfsroot/
    PWD := $(shell pwd)

    all:

    make -C $(KERNEL) M=$(PWD) modules
    install:
    make -C $(KERNEL) M=$(PWD) INSTALL_MOD_PATH=$(DEST_DIR) modules_install
    depmod -A

    clean:

    make -C $(KERNEL) M=$(PWD) clean
    rm -f *.order

    mycopy:
    cp *.ko /nfsroot/

    *************************************************************************************
    与驱动模块操作有关的命令:

    将当前目录下的xx.ko模块插入内核:
    insmod xx.ko

    将内核当中正在运行的模块xx移除:
    rmmod xx

    查看当前目录下的xx.ko模块的详细信息:
    modinfo xx.ko

    在模块已经成功安装的前提下利用此命令智能
    安装驱动模块(分析依赖关系,先安装被依赖的
    驱动模块):
    modprobe xx

    智能移除模块驱动,会将依赖的模块也移除:
    modprobe -r xx

    查看当前内核当中插入的驱动列表:
    lsmod

    哪一天走丢了,我会记着通往你心灵的路,爱从未离去。
  • 相关阅读:
    You Will Be Memorizing Things
    PowerShell与cmd
    select的一些问题。
    深刻理解数据库外键含义
    html居中问题
    jsp中嵌入的html
    jdbc连接mysql报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '金厉旭' in 'field list'
    [kuangbin带你飞]专题一 简单搜索
    算法竞赛训练指南11.2 最小生成树
    [kuangbin带你飞]专题六 最小生成树
  • 原文地址:https://www.cnblogs.com/yanshare/p/4214304.html
Copyright © 2011-2022 走看看