驱动学习笔记

发布时间:2017-7-9 7:09:52编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"驱动学习笔记 ",主要涉及到驱动学习笔记 方面的内容,对于驱动学习笔记 感兴趣的同学可以参考一下。

系统日志所在的地方 /var/log/kern.log所有的模块装载的内核在 /proc/modules移除内核 rmmod hello-1注入内核 insmod ./hello-1.kolsmod     查看系统中所有已经被加载了的所有的模块以及模块间的依赖关系modinfo    获得模块的信息module_param()宏定义用3个参数:变量名,类型和在sysfs中的相关的权限。传递参数grep -inr MODULE_AUTHOR * in /usr/src/linux-2.6.x/搜索参数用gcc-Wall-o hello hello.c用监控调试命令运行可执行文件(:strace ./hello),有印象吗?每一行你看到的都对应一个系统调用。/proc/meminfo就说明了内存使用情况的数据。 在命令行模式下连续按下gg=G这上个字符就能帮你自动调整格式。a 进入炼铁模式 5 括号匹配v 选择= 对齐多行删除:1,10dmknod 建立设备节点自动创建 mdev udevMODULE_DEVICE_TABLE一般用在热插拔的设备驱动中。作用是:将xx_driver_ids结构输出到用户空间,这样模块加载系统在加载模块时,就知道了什么模块对应什么硬件设备。用法是:MODULE_DEVICE_TABLE(设备类型,设备表),其中,设备类型,包括USB,PCI等,也可以自己起名字,上述代码中是针对不同的平台分的类;设备表也是自己定义的,它的最后一项必须是空,用来标识结束。内核中常用的内存分配和释放函数是 kmalloc()和 kfree(),编译的时候加上 -j3  四个核 就利用了三个核module_put ( ) 对于驱动的使用次数-12.6内核提供了更健壮、灵活的模块计数管理接口 try_module_get(&module), module_put(&module)取代2.4中的模块使用计数管理宏。模块的使用计数不必由自身管理,而且在管理模块使用计数时考虑到SMP与PREEMPT机制的影响(参考module.h中try_module_get和module.c中module_put的实现)。u  撤销ctrl + R 恢复 用旧函数报错 用新函数  加载不上. 我就草了

include <linux/init.h>

include <linux/module.h>

include <linux/kernel.h>

/* hello_init ---- 初始化函数,当模块装载时被调用,如果成功装载返回0 否则返回非0值 */
static int __init hello_init(void)
{
printk("I bear a charmed life.\n");
return 0;
}
/* hello_exit ---- 退出函数,当模块卸载时被调用 */
static void __exit hello_exit(void)
{
printk("Out, out, brief candle\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

makefile 的编写
HELLO_TARGET:= hello.ko
EXTRA_CFLAGS := -DLINUX_OS

EXTRA_CFLAGS += -I$(GXBSP_PATH)/include

hello-objs := hello.o

obj-m += hello.o

可以再后面添加相关的 依赖

相关kernel所在的文件路径所在的位置

GX_KERNEL_PATH=/home/liyj/my_robots/robots/kernel
all:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C $(GX_KERNEL_PATH) SUBDIRS=pwd

clean:
rm -rf $(HELLO_TARGET) .o .mod.c .tmp_versions Module.symvers modules.order .tmp_versions

这样子就可以形成一个在openwrt上运行的驱动
 
应用程序

int main()
{
int fd1,fd2;
int val = 1;
fd1 = open("/dev/led",O_RDWR);
write(fd1,&val,4);
fd1 = open("/dev/led",O_RDWR);
write(fd1,&val,4);
}


上一篇:一个互联网产品的进化周期大概
下一篇:Python连接MySQL数据库

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款