[转帖]新手基础知识&基本方法记录_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3423 | 回复: 0   主题: [转帖]新手基础知识&基本方法记录        下一篇 
lengyuLee
注册用户
等级:少校
经验:1118
发帖:83
精华:5
注册:2013-3-7
状态:离线
发送短消息息给lengyuLee 加好友    发送短消息息给lengyuLee 发消息
发表于: IP:您无权察看 2013-3-11 11:24:59 | [全部帖] [楼主帖] 楼主

文章转载自: bbs.csdn.net/topics/220010277

a.推荐内核学习书籍
  1.学习内核整体结构和基本理论知识:<Linux Kernel Development second edition>,中文名:Linux内核设计与实现 第2版
  2.学习驱动开发及查询基本资料:<Linux Device Drivers third edition>,中文名:Linux设备驱动程序 第3版
  3.学习要求:lkd这本书要求精读,ldd要求了解,做具体的驱动时候去翻翻,当然最基本的字符设备驱动和块设备驱动必须熟练掌握

b.内核源码学习
  1.c语言要求精通,指针和结构指针,指针函数及所以的数据类型的转换要求越熟悉越好,
    熟练运用c99标准及其扩展功能,还没有找到很好的中文资料,碰到立即积累
  2.必须有熟练掌握vim+tage或者emacs+etage的用法,本人推荐emacs
  3.熟悉kdb,proc接口等调试内核的方法,printk是必不可少的,本人后来很少用调试工具,主要用printk,呵呵..

c.一些网上抄过来的笔记
1.内存屏障(memory barrier)

 #define set_mb(var, value) do { var = value; mb(); } while (0)
#define mb() __asm__ __volatile__ ("" : : : "memory")


 1)set_mb(),mb(),barrier()函数追踪到底,就是__asm__ __volatile__("":::"memory"),而这行代码就是内存屏障。
 2)__asm__用于指示编译器在此插入汇编语句
 3)__volatile__用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。即:原原本本按原来的样子处理这这里的汇编。
 4) memory强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数 据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问 内存。
 5)"":::表示这是个空指令。barrier()不用在此插入一条串行化汇编指令。在后文将讨论什么叫串行化指令。
 6)__asm__,__volatile__,memory在前面已经解释

d.PC/104和PC/104+
 这两个电子和逻辑分布分别和ISA(PC/104)及PCI(PC/104+)一样,因此,软件不会注意到他们和统一桌面总线之间的不同;PC104PLUS 是专为PCI总线设计的,可以连接高速外接设备。

e.likely(x),unlikely(x)


 likely意识到x的值为真的可能性更大一些
 unlikely意识到x的值为假的可能性大一些
 在linux中判断语句经常会看到likely和unlikely,例如:

 if(likely(value)){
}
else{
}


简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) ==if(value)。
也就是likely和unlikely是一样的,但是实际上执行是不同的,加likely的意识是value的值为真的可能性更大一些,那么执行if的机 会大,而unlikely表示value的值为假的可能性大一些,执行else机会大一些。加上这种修饰,编译成二进制代码时likely使得if后面的 执行语句紧跟着前面的程序,unlikely使得else后面的语句紧跟着前面的程序,这样就会被cache预读取,增加程序的执行速度.




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论