Linux设备驱动

了解Linux目录结构

参考:https://www.cnblogs.com/mik-hello/p/15203716.html

新增设备驱动源码

参考3.4.2

1、在driver/ 对应子目录下心中设备驱动源码,或者在 arch/arm/mack-xxx新增板级支持的代码

2、修改同目录下的Kconfig配置脚本

3、修改同目录下的Makefile脚本

//-------hello.c------------------------
#include <linux/init.h>
#include <linux/module.h>

static int __init hello_int(void){
    printk(KERN_INFO " hellow world init\n");
    return 0;
}

module_init(hello_int);

static void __exit hello_exit(void){
    printk(KERN_INFO " hellow world exit\n");
}

module_exit(hello_exit);

MODULE_AUTHOR("fwy");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("111222 for test");
MODULE_ALIAS("a test module");


//-------Makefile------------------------
ifeq ($(KERNELRELEASE),)
	KERNELDIR    ?= /lib/modules/$(shell uname -r)/build
	PWD := $(shell pwd)

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_instal clean

else
    obj-m := hello.o
endif

modinfo命令

——查看模块的详细信息

modinfo hello.ko

module_param

——设置模块加载时的参数, 支持多个参数,

参数的内容,也可以通过 /sys/module/verify/parameters目录查看

static int test_id = 0;
static char *test_mod_name = "CPU"

module_param(test_id, int, S_IRUGO);
module_param(test_mod_name , charp, S_IRUGO);

static int __init hello_int(void){
    printk(KERN_INFO " verify init, test_id=%d, module_name=%s\n",test_id,test_mod_name);
    return 0;
}

module_init(hello_int);

程序执行 sudo insmod verify.ko test_id=5 test_mod_name="ISP"

dmesg:

[265283.099556] verify init, test_id=5, module_name=ISP

pamameters目录下的文件:

(备注: 模块被卸载时,该文件会被删除)

导出符号

EXPORT_SYMBOL_GPL导出符号

int reg_set(int reg_addr, int reg_data){
    return reg_data;
}

int reg_read(int reg_addr){
    return 0;
}
EXPORT_SYMBOL_GPL(reg_set);
EXPORT_SYMBOL_GPL(reg_read);

在 proc/kallsyms文件里可以找到对应的导出符号。

grep xxx /proc/kallsyms : 在文件中查找xxx

Linux文件系统

根目录“/”

查看/proc/devices文件可以获知系统中注册的设备,第1列为主设备号,第2列为设备名

查看/dev目录可以获知系统中包含的设备文件,日期的前两列给出了对应设备的主设备号和次设备 号

sysfs(系统文件系统)

顶层目录结构:

block目录包含所有的块设备;

devices目录包含系统所有的设备,并根据设备挂接的总线类型组织成 层次结构;

bus目录包含系统中所有的总线类型;

class目录包含系统中的设备类型(如网卡设备、声卡设 备、输入设备等)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值