- 博客(16)
- 收藏
- 关注
原创 linux驱动——内核通知链(探究i2c-dev.c 中的bus_register_notifier函数所得)
在学习 i2c-dev.c 文件时,有如下的一段函数一直不明所以static int i2cdev_notifier_call(struct notifier_block *nb, unsigned long action, void *data){ struct device *dev = data; switch (action) { case
2017-11-06 14:01:08
4705
5
原创 openwrt 编译内核模块中的配置问题
以 other.mk 中的iio 为例 对 KCONFIG下面的define KernelPackage/iio-core SUBMENU:=$(OTHER_MENU) TITLE:=Industrial IO core KCONFIG:= \ CONFIG_IIO \ CONFIG_IIO_BUFFER=y \ CONFIG_IIO_KFIFO_BUF \
2017-11-03 18:30:42
1894
原创 linux 驱动——时间、延时及延缓操作
一、jiffies内核通过定时器中断来跟踪事件流。时钟中断由系统定时硬件以周期性的间隔产生,间隔值由内核根据HZ设定。 一般为HZ的范围为50~1200。 jiffies_64为64位变量,在时钟中断没发生一次时,值增加一,用来计数从系统引导到当前时刻的时间节拍。jiffies 是unsigned long 型,32位系统为jiffies_64的低32位,64位系统是与jiffies_64相
2017-10-23 16:35:17
1857
原创 linux 驱动——高级字符驱动程序操作
内容ioctl 的ioctl 的系统概念与用户空间同步的方法进程休眠非阻塞IO及与用户间的通信原型函数int (*ioctl) (struct inode *inode, struct file *filp,unsigned int cmd, unsigned long arg);一、ioctl 命令ioctl 的命令由四部分组成通过ioctl()函数的cmd,下发需要底层响应的命令。c
2017-10-20 10:13:56
850
原创 linux 驱动——并发和竞态
一、并发造成的原因l 中断——中断几乎可以在任何时刻异步发生,也就可能随时打断当前正在执行的代码。 2 睡眠及与用户空间的同步——在内核执行的进程可能会睡眠,这就会唤醒调度程序,从而导致调度一个新的用户进程执。 3 对称多处理——两个或多个处理器可以同时执行代码。 4内核抢占——因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占(在2.6内核引进的新能力)。 5 多个用户空间进程组合访
2017-10-19 14:11:17
320
原创 llinux 驱动——字符驱动
一、基本概念 主设备号与次设备号: 可以理解为主设备号对应一个驱动程序,次设备号对应一个设备。二、重要的数据结构 struct file_operations : 文件操作 可参考: http://blog.youkuaiyun.com/sunsea1026/article/details/6586143 struct file
2017-10-18 15:20:10
221
原创 驱动基本知识
## 1. 用户空间与内核空间 ## 用户空间:应用程序运行的空间,有独立的地址映射,虚拟地址中大栈空间,发生段错误无害, 内核空间:内核程序运行的空间,有独立的地址映射,虚拟地址中小栈空间,发生段错误可能到时系统无法正常运行,用户空间和内核空间拥有独立的内存空间,用户空间数据与内核空间数据不能直接交互,不能直接相互引用,必须使用像copy_to_user 及 copy_from_user类似的
2017-10-18 13:44:21
264
原创 linux 驱动中几个驱动注册的实体函数
misc_register() 调用device_create_with_groups()(新内核, 旧的为device_create()) 函数进行注册,int misc_register(struct miscdevice * misc){ dev_t dev; int err = 0; bool is_dynamic = (misc->minor == MISC_DY
2017-08-15 10:47:03
2384
翻译 gpio-button-hotplug.c 分析
/* * GPIO Button Hotplug driver * * Copyright (C) 2012 Felix Fietkau <nbd@openwrt.org> * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> * * Based on the diag.c - GPIO interface driv
2017-03-07 11:18:38
2159
原创 openwrt 中添加新的文件、脚本、可执行程序到固件
网上有许多介绍如何编译程序到固件的文章,写一篇将多个文件编译到固件中的方法的文章。## Copyright (C) 2007-2016 OpenWrt.org# Copyright (C) 2010 Vertical Communications## This is free software, licensed under the GNU General Public License v2
2017-01-23 15:33:00
6668
原创 WRTnode 2Q 按键驱动说明
咨询了一下WRTnode开发的相关人员,以及参考网上资料,大致搞明白OpenWrt系统下的按键驱动是怎么回事。 涉及文件: 1、编译模块的文件 build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.18.29/arch/mips/ath79/mach-wrtnode2q.c ke
2016-08-17 13:38:53
722
原创 openwrt 驱动模块的编译与加载
1、要编译一个适用于openwrt系统的nids驱动, 源代码由硬件商提供。 首先在ubuntun 下 make 编译一下, 查看是否编译正常,是否出现错误, 修改错误。OpenWrt环境下的编译 1、 进入openwrt的编译目录,即是 make menuconfig 的配置。在 ./package/kernel/ 下 mkdir gobinet touch go
2016-07-05 09:41:24
9378
1
原创 sed 一些用法的解释
代码来源openwrt : luci local file="$1" ( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \ /etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \ -type f -o -type l
2016-04-12 11:08:00
568
原创 mipsel-openwrt-linux-gcc交叉编译时找不到库文件的解决办法
1、在学习《linux程序设计》的时候利用ubuntu14.04系统自带的dbm数据库对一个CD程序想要交叉编译,然都一直到mips架构下的WRTnode2P, 但是在交叉编译的时候找不到libgdbm库,在WRTnode.cc中也找不到对应的库文件(有一个libgdbm,但是版本吗大不相同)。于是找到从网上下载源码,因为dbm相关的函数都是用C语言开发的,可以自行交叉编译得到相应的可执行文件。
2016-03-14 14:15:08
9340
原创 欢迎使用优快云-markdown编辑器
在对大量的头文件和源文件进行编译链接时要用到 makefile。1、当大量源文件和头文件在同一个文件加时makefile的制作 1)比较笨拙直接的方法可以利用 gcc -MM *.c 找出源文件与其他文件的依赖关系 如此编译每一个源文件,最后进行链接生成最终的目标文件2、 利用makefile 的内置规则#1 all: app 2 3 objs = app.o config.o d
2016-03-14 13:51:54
295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人