![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kernel
文章平均质量分 52
AaronIn
1深入学习kernel及嵌入式底层驱动 2aaroninsfoxmail.com
展开
-
与内核参数交互实例
如何与内核模块进行参数交互,在2.6内核(include/linux/moduleparam.h)里面进行了函数定义;1、module_param(name, type, perm); name既是用户看到的参数名,又是模块内接受参数的变量; type表示参数的数据类型,是下列之一:byte, short, ushort, int, uint, long, ulong,原创 2012-04-27 23:03:50 · 731 阅读 · 0 评论 -
内核增加自定义系统调用(一)
原理:(2.6.22.6内核) 应用程序先用适当的值填充寄存器,然后调用一个特殊的指令跳到内核某一个固定的位置,内核根据应用程序所填充的固定值来找到相应的函数执行; 适当的值: 在include/asm-arm/unistd.h中为每个系统调用规定了唯一的编号,称为 系统调用号; #define __NR_restart_s原创 2012-05-02 23:36:47 · 810 阅读 · 0 评论 -
用户空间与内核空间数据交换的方式(转)
内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink一、引言 一般地,在使用虚拟内存技术的多任务系统上,内核和应用有不同的地址空间,因此,在内核和应用之间以及在应用与应用之间进行数据交换需要专门的机制来实现,众所周知,进程间通信(IPC)机制就是为实现应用与应用之间的数据交换而专门实现的,大部分读者可能对进程间通信比较了解,但对应用与内核之间转载 2012-05-03 21:34:01 · 2517 阅读 · 0 评论 -
常用oops分析方法
插入内核模块时出现oops信息,一般调试方法: 在宿主机上: # arm-linux-objdump -D -S oops.ko > log 在生成的log文件中,根据insmod出现的PC指针,寻找相关函数和具体位置;==========转载别人的例子:http://blog.csdn.net/转载 2012-05-03 22:24:20 · 1160 阅读 · 0 评论 -
并发与竞态(笔记)
机制:一、semaphore机制,信号量1、定义信号量struct semaphore sem;2、初始化信号量void sema_init();void init_MUTEX(); //初始化互斥锁void init_MUTEX_LOCKED(); //初始化互斥锁DECLARE_MUTEX();DECLARE_MUTEX_LOCKED();原创 2012-05-03 23:13:12 · 594 阅读 · 0 评论 -
自动创建设备文件
只需要在驱动初始化module_init(xxx_init)中的xxx_init()函数中调用class_create()和device_create()即可; 模板如下:#include ......static int xxx_init(void){ struct class *myclass; ...... /*自动创建设备文件*/原创 2012-05-15 23:01:03 · 414 阅读 · 0 评论 -
内核等待队列(笔记)
可以用等待队列来实现进程的阻塞;操作方法:1、定义等待队列wait_queue_head_t my_queue;2、初始化等待队列int_waitqueue_head(&my_queue)3、定义并初始化等待队列DECLARE_WAIT_QUEUE_HEAD(my_queue)4、有条件睡眠(1)wait_event(queue, conditi原创 2012-05-17 23:08:08 · 512 阅读 · 0 评论 -
ioctl设备控制(笔记)
用户层:原型:int ioctl(int fd, unsigned long cmd, ...)说明:其中原点表示可选参数,存在与否依赖于控制命令(第二个参数)是否涉及到与设备的数据交互;驱动层:原型:int 说明:cmd参数是从用户层传下来,可选参数arg以一个unsigned long 的形式传递(为一个整数或为一个指针),如果cmd命令不涉及数据传输,原创 2012-05-16 22:56:42 · 722 阅读 · 0 评论