驱动程序中lsmod命令实际读取的是/proc/modules文件即与lsmod命令对应的结果是cat /proc/modules内核中已经加载的模块的信息存在于/sys/module目录下modprobe命令比insmod命令要强大,它在加载某模块时会同时加载该模块所依赖的其他模块使用modprobe -r filename的方式卸载将同时其依赖的模块modinfo模块名命令可以获得模块的信息modinfo hello.ko

filename:       hello.ko

alias:          a simplest module

description:    A simple Hello World Module

author:         Jimmy

license:        Dual BSD/GPL

srcversion:     FC20E540C350C6F733C7546

depends:

vermagic:       2.6.28-15-generic

SMP mod_unload modversions 586驱动模块参数,MODULE_PARM_DESC可以注解参数如:static int num = 4000;

module_param(num, int,

S_IRUGO);

MODULE_PARM_DESC(myshort,

"A integer");

#include #include MODULE_LICENSE("Dual BSD/GPL");

static char *book_name = "dissecting Linux Device Driver";

static int num = 4000;

static int param[8] = {1, 2, 3, 4, 5, 6, 7, 8};

static int param_len = 8;

static int book_init(void)

{

int i;

printk(KERN_ALERT " book

name: %s\n", book_name);

printk(KERN_ALERT " book

num: %d\n", num);

for(i = 0; i < 8; i++)

{

printk(KERN_ALERT

"param[%d] =  %d \n", i, param[i]);

}

return 0;

}

static void book_exit(void)

{

printk(KERN_ALERT " Book

module exit\n");

}

module_init(book_init);

module_exit(book_exit);

module_param(num, int, S_IRUGO);

module_param(book_name, charp, S_IRUGO);

module_param_array(param, int, &param_len, S_IRUGO);

MODULE_AUTHOR("Jimmy, fightingjimmy@gmail.com");

MODULE_DESCRIPTION("A simple Module for testing module params");

MODULE_VERSION("v1.0");

sudo insmod book.ko

dmesg|tail -10

[14047.901352]  book name: dissecting Linux Device Driver

[14047.901366]  book num: 4000

[14047.901377] param[0] =  1

[14047.901386] param[1] =  2

[14047.901388] param[2] =  3

[14047.901389] param[3] =  4

[14047.901390] param[4] =  5

[14047.901391] param[5] =  6

[14047.901392] param[6] =  7

[14047.901393] param[7] =  8

sudo rmmod book.ko

sudo insmod book.ko book_name='Hello' num=1000 param=8,7,6,5

[14298.942521]  book name: Hello

[14298.942535]  book num: 1000

[14298.942547] param[0] =  8

[14298.942558] param[1] =  7

[14298.942559] param[2] =  6

[14298.942560] param[3] =  5

[14298.942561] param[4] =  5

[14298.942562] param[5] =  6

[14298.942564] param[6] =  7

[14298.942565] param[7] =  8

sudo rmmod book.ko

sudo insmod book.ko book_name="Hello World" num=1000 param=8,7,6,5

insmod: error inserting 'book.ko': -1 Unknown symbol in module

dmesg|tail -10

[15097.587159] book: Unknown parameter `world'猜想:可能是因为传入的字符串参数带有空格的原因(有遇到类似情况的请不吝赐教)

linux2.6的/proc/kallsyms文件对应着内核符号表,它记录了以及符号所在的内存地址。EXPORT_SYMBOL(符号名);

EXPROT_SYMBOL_GPL(符号名);

module/

include/

print.h

print/

print.c

Makefile

symbol/

test.c

Makefile

/****************************************

* print.h                               *

*****************************************/

#ifndef PRINT_H

#define PRINT_H

void add_integer(int a, int b);

void sub_integer(int a, int b);

#endif

/****************************************

* print.c                               *

*****************************************/

#include #include #include "print.h"

MODULE_LICENSE("Dual BSD/GPL");

void add_integer(int a, int b)

{

printk(KERN_ALERT " sum:

%d\n", a + b);

}

void sub_integer(int a, int b)

{

printk(KERN_ALERT " sub:

%d\n", a - b);

}

EXPORT_SYMBOL(add_integer);

EXPORT_SYMBOL(sub_integer);

/****************************************

* test.c                                *

*****************************************/

#include #include #include "print.h"

MODULE_LICENSE("GPL");

static int symbol_init(void)

{

printk(KERN_ALERT " Symbol

test init\n");

add_integer(10, 6);

sub_integer(10, 6);

return 0;

}

static void symbol_exit(void)

{

printk(KERN_ALERT " Symbol

test exit\n");

}

module_init(symbol_init);

module_exit(symbol_exit);

print目录下的Makefile:obj-m := print.o

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

PRINT_INC = $(obj)/../include#包含print.h头文件EXTRA_CFLAGS += -I $(PRINT_INC)

modules:

$(MAKE) -C $(KERNELDIR)

M=$(PWD) modules

modules_install:

$(MAKE) -C $(KERNELDIR)

M=$(PWD) modules_install

clean:

rm -rf *.o *~ core .depend

.*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

symbol目录下的Makefile:obj-m := test.o

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

SYMBOL_INC = $(obj)/../include

EXTRA_CFLAGS += -I $(SYMBOL_INC)

KBUILD_EXTRA_SYMBOLS=$(obj)/../print/Module.symvers

modules:

$(MAKE) -C $(KERNELDIR)

M=$(PWD) modules

modules_install:

$(MAKE) -C $(KERNELDIR)

M=$(PWD) modules_install

clean:

rm -rf *.o *~ core .depend

.*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean注意:若是Makefile文件中没有KBUILD_EXTRA_SYMBOLS=$(obj)/../print/Module.symvers则需要将print目录下的Module.symvers拷贝到symbol目录下,这是linux kernel 2.6.26 之后版本的bug (详细描述, 请看)

linux驱动导出文件属性,linux驱动入门——模块参数和导出符号相关推荐

  1. linux c语言文件属性,Linux C获取文件属性

    From: http://www.tianya360.com/html/xitonganzhuang/caozuoxitong/2010/0524/924.html Linux下如何在C下面判断一个文 ...

  2. linux 下的文件属性,Linux 下文件属性介绍(示例代码)

    (-rw-r--r--) (1) ( root) (root) (42304) (Sep 4 18:26) (install.log) (1)档案类型权限,(2)连接数,(3)档案拥有者,(4)档案所 ...

  3. linux chattr修改文件属性,linux chattr(改变文件属性)

    命令 : chattr 语法: chattr [+-=][ASaci [文件或者目录名] '+-=' : 分别为增加.减少.设定 'A' : 增加该属性后,文件或目录的atime将不可被修改: 'S' ...

  4. linux脚本判断文件属性,linux的shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断...

    格式1:if 条件 ; then 语句; fi (常用) #以命令的方式表达 [[email protected] ~]# for i in `seq 1 5`; do echo $i; done 1 ...

  5. linux查看特定文件属性,Linux 查看文件属性一些命令

    查看文件的属性 ls – 查看当前目录下的所有文件和目录(不包括隐藏文件) ls -a – 查看当前目录下的所有文件和目录(包括隐藏文件) ls -l – 查看当前目录下的所有文件和目录的全部属性和权 ...

  6. Linux驱动开发系列:整理入门Ubuntu知识

    文章目录 Linux驱动开发 一.Linux驱动开发第一期:Ubuntu基础入门 1.Vmware虚拟机安装 2.Vmware内Ubuntu功能介绍 2.1 启动栏介绍 2.2 Ubuntu连接USB ...

  7. 09 --> OpenWRT 的 linux内核patch方法,添加5G模块驱动

    一.新建补丁文件 1.准备内核源码树 使用如下命令 make target/linux/clean V=s QUILT=1 make targe/linux/prepare V=s QUILT=1 2 ...

  8. 嵌入式linux学习-驱动(2) hello world 模块实现记录 基于RK3568

    今天跟随 讯为的开发板实现了 hello world 的驱动,之前已经实现了很多次,这次还是重新实现了一次 本文是基于RK3568 1. 编迅为的内核 topeet@ubuntu:~/Linux/rk ...

  9. 嵌入式linux驱动开发之移远4G模块EC800驱动移植指南

    回顾下移远4G模块移植过程, 还是蛮简单的.一通百通,无论是其他4G模块都是一样的.这里记录下过程,分享给有需要的人.环境使用正点原子的imax6ul开发板,板子默认支持中兴和移远EC20的驱动,这里 ...

最新文章

  1. Android学习笔记篇2. 单选按钮、复选按钮
  2. [APIO2018] New Home 新家(线段树,二分答案,离散化)
  3. centos7修改服务器密码忘记,Centos7忘记root密码怎么修改
  4. docker 启动时指定需要绑定的网卡_Docker容器网络-基础篇
  5. java中引用数组_javaOO——引用数组
  6. Zabbix 4.0.0 新功能介绍
  7. Django项目实践1 - 创建Django项目
  8. linux 安装phpMyAdmin
  9. java keytool下载_keytool gui工具下载
  10. 读书笔记——《思维的乐趣matrix67数学笔记》
  11. redis下载与安装(windows版)
  12. 2021-09-09md
  13. 使用opencv读取rtsp流的图片帧进行目标检测,并将处理好的图像推到rtsp服务器上
  14. 平面直角坐标系中的旋转公式_中考难点,旋转+动点的最值问题的构建
  15. yocs_velocity_smoother速度平滑配置与使用
  16. 为什么电脑无限重启,难道是我的电脑装了无限宝石?
  17. 百度地图离线开发2.0
  18. [LeetCode]Medium - Cutting Ribbons - python
  19. APS的主要功能有哪些?你了解吗?
  20. 安卓屏幕适配——pt适配,将pt作为宽度百分比单位

热门文章

  1. Python学习笔记之基础(二)变量和类型
  2. #51CTO学院四周年# 成长路上的我和你
  3. 反射__获取delegate的信息
  4. vs2012中使用localdb实例还原一个sql server 2008r2版本的数据库
  5. [Android] 基于 Linux 命令行构建 Android 应用(六):Android 应用签名
  6. iOS6全系列设备完美越狱工具发布
  7. 悲催的IE6,悲催的壳浏览器,悲催的搜狗,悲催的360
  8. WebPart(SharePoint)中如何使用自定义的Javascript和css样式
  9. XGBoost输出特征重要性以及筛选特征
  10. Mashmokh and Numbers CodeForces - 415C