linux
文章平均质量分 57
Vartimes
这个作者很懒,什么都没留下…
展开
-
linux-2.6.22.6内核之输入子系统
利用input子系统开发驱动时,只需构造input_dev进行填充注册即可,input_handler层是系统已经实现好了的,当进行dev和handler注册时会进行两边id匹配,如果匹配上则调用handler的connect函数,connect会创建input_handle结构体并且把其添加到dev和handle的链表里,input_handle又保存了当前handler和dev,这样handler和dev就能查找链表找到input_handle从而找到对方。原创 2023-06-25 12:18:23 · 331 阅读 · 0 评论 -
yaffs格式的根文件系统制作
linux内核启动后,它接下来要做的事就是启动应用程序,而应用程序在哪里呢,类比windows,启动时要读取c盘,所以linux的文件系统就类似于c盘,并且我们使用的ls、cp等一些类命令(本质是应用程序),也都在根文件系统上,这些程序都来源于busybox,所以根文件系统制作需要busybox。13,由于应用程序需要c库,所以文件系统也需要安装这个库,这个库就用交叉编译链lib目录下的动态文件,在文件系统根目录下创建lib目录,然后把编译链lib目录下的动态文件拷贝过去就行。原创 2023-06-22 23:13:40 · 510 阅读 · 0 评论 -
驱动之按键防抖
4.例如,mod_timer(&buttons_timer, jiffies+HZ/100)就表示把定时器中断时间每次延迟10ms,直到定时器中断在最后一次按键中断,设置的时间产生中断时,才会去读取按键值,这就相当于把读取按键值延迟到最后一次按键中断里,这样就避免了按键抖动带来的读取值不准确的问题。2.为了保证读取的值是准确的,则应该在最后一次中断里读取按键值,定时器的解决思想是,因为定时器也会在指定的时间产生中断,并且它的中断时间是可以修改的,所以把读取按键值的逻辑放在定时器的处理函数里。原创 2023-06-21 00:41:24 · 631 阅读 · 0 评论 -
linux-2.6.22.6内核信号量、阻塞和费阻塞
所以,信号量其实就代表着互斥锁,当某个进程获取到这个信号量时,其他进程就只能进入休眠状态,只有当该信号量被之前占用的进程释放后,当前进程才能被唤醒获取到信号量,所以这就很好对共享资源进行了保护。原创 2023-06-20 23:43:52 · 101 阅读 · 0 评论 -
linux-2.6.22.6内核原子操作
由于这三步不是原子操作,所以当app1读取lock_val的值为1但没修改时,app2又进来读取lock_val的值,此时lock_val仍为1,所以app2把lock_val减一并打开设备,此时app1读取的还是原先的1,所以app1也会把lock_val减一并打开设备,此时app1和app2同时打开了设备,这种情况虽然发生概率很小,但仍有可能发生,所以需要把lock_val定义成原子变量。1.读取lock_val的值。2.修改lock_val的值。3.把修改后的值放回去。原创 2023-06-20 19:37:57 · 103 阅读 · 0 评论 -
linux-2.6.22.6内核异步通知
应用程序也通过 signal(SIGIO, my_signal_fun)进行了注册,此时注册函数my_signal_fun就会读取按键值,这就是异步通知,不用应用程序主动查询状态,而是产生结果后主动通知应用程序。fcntl会把自己的pid告诉通知方,Oflags 和fcntl会改变flag状态从而触发s3c24xx_fasync的调用,s3c24xx_fasync调用fasync_helper对button_async进行初始化,button_async是异步通知需要的参数,这是自动进行的。原创 2023-06-20 18:40:09 · 98 阅读 · 0 评论