自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除