当前位置: 技术问答>linux和unix
求助学习LINUX操作系统的良策
来源: 互联网 发布时间:2016-09-13
本文导语: 我在微电子公司从事芯片应用工作,因为都从事的是接口芯片,所以涉及到的知识层面非常有限。想拓宽自己的知识以及就业半径,所以打算从嵌入式入手,做SOC芯片的驱动相关工作。目前每天下班回家都在看...
我在微电子公司从事芯片应用工作,因为都从事的是接口芯片,所以涉及到的知识层面非常有限。想拓宽自己的知识以及就业半径,所以打算从嵌入式入手,做SOC芯片的驱动相关工作。目前每天下班回家都在看操作系统等书,但是这本书晦涩难懂,觉得看不出头绪来。非常苦恼,也非常不自信了,不知道能否坚持下去。
一直想报一个培训学校,系统的参加一下嵌入式培训,但是一直没有找到合适的学校,所以只能坚持自学。自己的打算是先把C语言再看几遍,现在这个工作基本结束,下一步在研究操作系统,目前刚刚开始处在这一步。学电子的出生,没有学过操作系统,真难。
不知道,不知道各位过来人你们是怎么走过这段路的。能否给我一点建议,我怎样才能将这条路走下去。非常感谢。
一直想报一个培训学校,系统的参加一下嵌入式培训,但是一直没有找到合适的学校,所以只能坚持自学。自己的打算是先把C语言再看几遍,现在这个工作基本结束,下一步在研究操作系统,目前刚刚开始处在这一步。学电子的出生,没有学过操作系统,真难。
不知道,不知道各位过来人你们是怎么走过这段路的。能否给我一点建议,我怎样才能将这条路走下去。非常感谢。
|
学习它,享受它,配置它,修改它
享受最重要,学习、配置、修改都是来更好的享受,一切以享受Unix为中心
享受最重要,学习、配置、修改都是来更好的享受,一切以享受Unix为中心
|
http://topic.csdn.net/u/20100622/10/2ef16953-282a-4b71-874c-f9fcddfcb80b.html
1、看书,安装一个喜欢的版本
2、实践书上的讲解
3、忘掉 wndows,扔掉windows
4、到坛子灌水帮助别人,写体验
5、到坛子灌水科学地问问题
6、善用google
7、重复以上步骤
1、看书,安装一个喜欢的版本
2、实践书上的讲解
3、忘掉 wndows,扔掉windows
4、到坛子灌水帮助别人,写体验
5、到坛子灌水科学地问问题
6、善用google
7、重复以上步骤
|
a.推荐内核学习书籍
1.学习内核整体结构和基本理论知识:,中文名:Linux内核设计与实现 第2版
2.学习驱动开发及查询基本资料:,中文名: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的实现在
1.学习内核整体结构和基本理论知识:,中文名:Linux内核设计与实现 第2版
2.学习驱动开发及查询基本资料:,中文名: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的实现在
|
个人认为先学习下操作系统原理
弄清楚操作系统原理的一些基本概念
再去看固定的操作系统,就会觉得轻松很多!
不过原理比较枯燥,还是有点耐心的看吧
一次不行,两次,三次知道看懂为止
弄清楚操作系统原理的一些基本概念
再去看固定的操作系统,就会觉得轻松很多!
不过原理比较枯燥,还是有点耐心的看吧
一次不行,两次,三次知道看懂为止