(kernel)新手基础知识

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预读取,增加程序的执行速度,likely和unlikely的实现在



3. 进入 Linux 内核开发。
内核开发的学习难度要比 Linux 应用程序开发大 3倍左右。基本上,有一年的linux应用开发经验,就可以主动进入到linux 内核开发。
必看的书籍;《Linux Device Drivers》,《Understanding TheLinux Kernel》,《Linux Kernel Development》(分别简称LDD,ULK, LKD)。LDD,ULK,我从卓越网或者当当网买了纸质版的。当然PDF格式的电子版也有,大家可以google.

学习编译内核,配置内核,用新内核启动系统.
学习写内核模块, 了解内核常用的API。
可以分析TCP/IP协议栈,网卡驱动等等。
例如TCP/IP协议栈,经典的书:
W.Richard Stevens著《TCP/IP详解》三卷书.
RFC文档。
lwIP,一个开源的TCP/IP协议栈,比Linux自己的TCP/IP协议栈要简单。
开源的协议分析工具:wireshark。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值