- 博客(13)
- 收藏
- 关注
原创 掩码
位级运算的一个常见用法就是实现掩码运算,这里掩码是一个位模式,表示从一个字节中选出的位的集合。看一个例子,掩码0xff(最低的8位为1)表示一个字的低位字节。位级运算 x & 0xff 生成一个由 x 的最低有效字节组成的值,而其他的字节就被置为0。 比如,对于 x = 0x89ABCDEF,其表达式将得到 0x000000EF。在linux kernel 代码里面经常看到这样的语
2015-11-02 23:02:52 871
原创 atomic_read原子操作
CPU指令原子的,不可能出现指令执行到一半就被中断的情况。中断只能发生在指令与指令之间。所以,在单处理器情况下,一条指令能完成的事情就是原子的。不管这条指令究竟做了多少事情。多处理器情况下就不一样,一条CPU指令如果包含多个内存操作,则这多次操作之间可能有其他CPU也在操作内存,并且有可能它们操作的就是同一块内存。所以,在多处理器情况下,只进行一次内存读写的指令才是原子的。如果
2015-11-02 17:05:50 3081
转载 Container_of详解
Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 Container_of的定义如下: [cpp] view plaincopy#define container_of(ptr, type, member
2015-10-25 04:40:19 465
原创 i2c_mux
/* multiplexer per channel data */struct i2c_mux_priv {struct i2c_adapter adap;struct i2c_algorithm algo;struct i2c_adapter *parent;void *mux_priv;/* the mux chip/device */u32 chan_
2015-10-25 04:01:35 926
原创 spi_bitbang_start
/** * spi_bitbang_start - start up a polled/bitbanging SPI master driver * @bitbang: driver handle * * Caller should have zero-initialized all parts of the structure, and then * provided callback
2015-10-25 00:20:52 607
转载 EXPORT_SYMBOL解析
一般我们编写C程序时,要调用某个文件中的函数,需要在本文件中包含声明有被调用函数的头文件,然后编译连接后,方能找到调用函数。对于模块依赖的情况,不能简单的使用上面的方法,内核提供了一个机制,就是EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。您还可以手
2015-10-24 13:37:22 249
原创 input_set_abs_params
input_set_abs_params(input_dev, ABS_X, 0, ugee->features->max_x, 4, 0);input_set_abs_params(input_dev, ABS_Y, 0, ugee->features->max_y, 4, 0);input_set_abs_params(input_dev, ABS_TILT_X,
2015-10-24 13:01:57 1682
原创 鼠标input_event鼠标事件设置
input_event示例:input_event(uk_dev, EV_KEY, KEY_L, (usb_buf[0] & (1input_sync(uk_dev);input_event(uk_dev, EV_KEY, KEY_L, (usb_buf[0] & (1input_sync(uk_dev);左键鼠标触发事件,USB包 usb_buf[0] 设置;
2015-10-24 12:48:11 2662
原创 __attribute_used__的作用
GCC的一个扩展属性在Linux上这样的定义#define __attribute_used__ __attribute__((__used__))used This attribute, attached to a function, means that code must be emitted for the function even if i
2015-10-24 12:09:03 5185
原创 input_event_compat
struct input_event_compat {struct compat_timeval time;__u16 type;__u16 code;__s32 value;};输入事件兼容结构体内包含兼容性时间,类型,code码,值struct compat_timeval {compat_time_t tv_sec;s32 tv_use
2015-10-24 11:54:35 303
原创 msecs_to_jiffies详解
msecs_to_jiffies-->jiffies_to_msecsstatic inline unsigned int jiffies_to_msecs(const unsigned long j){#if HZ return (1000 / HZ) * j;#elif HZ > 1000 && !(HZ % 1000)return (j + (HZ / 1000) -
2015-10-24 11:42:20 21997 1
转载 Linux内核定时器
人们习惯用于表示时间的方法是:年、月、日、时、分、秒、毫秒、星期等等,但是在内核中,为了软件逻辑和代码的方便性,它使用了一些不同的时间表示方法,并为这些表示方法定义了相应的变量和数据结构,本节的内容就是阐述这些表示方法的意义和区别。/*************************************************************************
2015-10-24 11:33:51 421
转载 test_bit、set_bit和clear_bit
//将addr的第nr(nr为0-31)位置值置为1; //nr大于31时,把高27的值做为当前地址的偏移,低5位的值为要置为1的位数 extern __inline__ int set_bit(int nr,int * addr) { int mask, retval; addr += nr >> 5; //n
2015-10-24 02:01:40 7363
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人