热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

嵌入式软件学习计划

内核书籍比如《Linux内核设计与实现》->《深入理解Linux内核》->《Linux驱动程序》,Step0:这个阶段的同学基本对OS没有认识,可以从安装系统,配置系统,学习各种编
内核书籍
比如《Linux内核设计与实现》->《深入理解Linux内核》->《Linux驱动程序》,
 Step 0:
这个阶段的同学基本对OS没有认识, 可以从安装系统, 配置系统,学习各种编辑器的使用,
与脚本的编写.建议从Linux入手,毕竟比较容易得到各种发行版本,而且用户群比较大,有了问题
容易得到解答.推荐的发行版本是桌面Ubuntu,服务器 Debian.
推荐教材:
LinuxCBT 系列的培训教材不错, swf文件, 属于手把手教的,只是用英语教学.
O'Reilly 出版了一系列的关于linux环境下的工具使用的书. 包括了Bash, vim , emacs,
linux 配置等 很多.用到具体工具时可以参考.


入门阶段各个linux社区的FAQ很重要,基本包含了初学者能碰到的大部分问题,好好利用.
例如国内的linuxsir, CLF, CU, etc .国外主要时几个主要的邮件列表.


Step 1:


    对于系统使用有了基本掌握之后,开始进入编写应用程序阶段 ,
进入这阶段前提是
C语言必须 有非常扎实的基础. 如果看完 expert c programming , 觉得没有困难,算是过关
    能基本使用vim,emacs ,其中之一.
    基本会编写makefile.
    这阶段学习的必备之书是APUE.作者steven是我非常敬佩的前辈,可惜英年早逝.这本书讲解非常
全面,初学会感到困难,但是坚持下来受益非浅.第二版已经引进可以买到


    Howto write makefile   这个有中文的,可以作为写makefile的参考.
    O'Reilly 也有 emule上搜吧




    这里除了一般的应用程序外有3个重要的分支.


    A.网络编程. 类unix下有非常丰富的网络工具所以这个是很大的一类分支.网络通信本质上也是
          进程间通信,所以steven的进程间通信3卷本就是必看的书(steven生前只完成了2卷
          第三卷由他的朋友续写.具体情况不明).作为更进一步可以研究apache的衍生项目
          APR和ACE(这个需要比较深厚的C++,设计模式的功底).可以说网络编程是一个非常大的分支,
          精通需要耗费很多时间.研究内核看完steven的前2卷即可.


    B.Xwindows 这个涉及到GUI, 也是一个庞大的分支,研究内核只需要关注X的架构和
        驱动之间的关
            系即可.这个分支很庞大,可是好的书其实不多.只有92年的这个系列
            O'Reilly - The Definitive Guides To The X Window Systems, 
                  Vol 1 - Xlib Programming Manual, 3Rd Ed .
            最近xserver的架构有很大的变化,xgl的出现石破天惊,看过novell2月在法国的演示
        真是无话可说.只能说在创新这一点上我们还没有资格来谈.这点我同意BNN的观点,这
        10年我们的任务就是学习,追赶.CLF 上面有一些文章和翻译的project


      C. 脚本.研究内核掌握Bash即可,不过这几年perl,php,python,ruby都很火爆,国内这
        这方面也很红火.这些书如过江之鲫,没啥好说的.


Step2:
      开始进入OS 的正题, 首先要掌握基本概念 首推 operating system concepts 第六版
    通过这本书可以掌握基本概念, 有个感性认识.


      然后可以看<<操作系统设计与实现>> 这本书是结合minix这个教学系统来讲的,也是经典书籍
    不过很少有人有耐心看完上下两册.现在已经进化到minix3了,老头不甘于只作一个教学系统.差点
    去念老头的phd.minix3 已经改变了很多. 
      
      还有一本很好的书籍Operating Systems: A Design-Oriented Approach 这本书很难找,
      当年我从一堆垃圾书中掏到这本世图的影印本,印数很小,不过确实是一本好书,作者把每章的概
      念对应到java代码 ,深入浅出,可惜没人重视.


    M. J. Bach , The Design of the UNIX Operating System, Prentice-Hall
    经典中的经典


      这个阶段主要是从总体上把握OS的整体结构,对各个概念基本了解.


step 3:
      
      以linux为平台的内核开发的初级阶段.


        <> 3th


        <> 3th


        <> 2th 
    
        <>




        介绍unix OS内核的几本重要的书:


        The Design and Implementation of the FreeBSD Operating System
        FreeBSD 的经典诠释.


        The Design and Implementation of the 4.4BSD Operating System


        4.4BSD-Lite的经典诠释
           


        《 UNIX 高级教程系统技术内幕 》中文的是96年的老版本,听说出新版了,还没到手


        Solaris Internals: Core Kernel Architecture
        sun在unix历史上作出了很多贡献,solaris的进程调度 内存管理,文件系统 都有独到之处.
        还有线程模型是m:n 的混合模式, 实现方法还有很有意思的.
       


Step4:
      从这里开始进入了OS的具体实现和内核很具体的分支.
      进入这章之前必须要对编译器, 体系结构有中等水平的认识.
      也就是说编译器要看过龙书,体系要看过量化方法这本.最好加上see mips run 
      调度, 内存管理, 网络协议栈,文件系统,体系相关.进程管理,
      Linker&&Loader , tool-chain
      这些都是很重要的分支都有很重要的应用.


      对于调试器原理要有一定的了解,能熟练使用




      The Linux® Networking Architecture: Design and Implementation of Network


      Understanding The Linux Virtual Memory Manager Mel Gorman , 
      和这本书的作者当面讨论过, 很nice的人,却在ibm做java coder 好奇怪 呵呵
    
      2.4内核内存管理的全面分析, 2.6中改动不小


      linux 情景分析 2.4 kernel 的全面分析. 浙大的毛德操,李善平老师力作.


      linux 完全注释 linux 早期版本的全面解析 国人力作


    
      solaris 代码已经公开 可以参考


      Wiley.UNIX.Filesystems.Evolution.Design.and.Implementation


      SunOS50MultithreadArchitecture


      Wiley - Symbian OS Internals {Real-time Kernel Programming}


      这一阶段 书籍已经是辅助,主要是靠查看代码,做实际的修改,实验,比较.
      
Step 5 :
      进入微内核高端专用系统移植与开发.QNX, IOX , RTEM,ARINC-653 XEN
      纯粹的学术研究的os : Plan 9 (派生出utf8 , proc 文件系统) Plan B Hurd Oskit L4


      到这一阶段的人数很有限, 基本是靠团队,靠实力,靠经验摸索了




有用的工具: lxr 索引代码的利器.


有关系统软件的战略问题见陈怀临的对中国系统软件的思考


btw: kuth的书估计不是每个人都有耐心看完的,所以平时无聊的时候建议看mit算法导引的录像.
       绝对大补,emule上有,可以下到 . 中科大的acm站点上也有,教育网的可以去下.
        有什么遗漏不当之处,请大家指正.




一个值得浏览的博客:chinaunix.net
博客名:举世无双的学习之路


职业规划:
程序员-软件工程师-架构师-系统分析师(项目管理)-技术总监(项目总监)-CTO,COO,CIO
推荐阅读
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 经过半年的精心整理,我们汇总了当前市场上最全面的Android面试题解析,为移动开发人员的晋升和加薪提供了宝贵的参考资料。本书详细涵盖了从基础到高级的各类面试题,帮助读者全面提升技术实力和面试表现。章节目录包括:- 第一章:Android基础面试题- 第二章:... ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 程序员的“语言奇缘”续篇:计算中心管理员小C的非正式编程之旅
    (以下故事纯属虚构,旨在为编程爱好者提供一丝轻松时光,如有雷同,纯属巧合,敬请读者勿过度联想)在操作系统课程中,我们认识了计算中心的管理员小C。小C虽然并非科班出身,却凭借对编程的浓厚兴趣和不懈努力,逐渐在技术领域崭露头角。她不仅熟练掌握了多种编程语言,还经常利用业余时间开发一些实用的小工具,帮助同事提高工作效率,成为了团队中的技术明星。小C的故事激励着每一个热爱编程的人,证明了技术之路不问出处,关键在于不断学习与实践。 ... [详细]
  • 深入解析 C 语言与 C++ 之间的差异及关联
    深入解析 C 语言与 C++ 之间的差异及关联 ... [详细]
  • 在操作系统中,阻塞状态与挂起状态有着显著的区别。阻塞状态通常是指进程因等待某一事件(如I/O操作完成)而暂时停止执行,而挂起状态则是指进程被系统暂时移出内存,以释放资源或降低系统负载。此外,本文还深入分析了`sleep()`函数的实现机制,探讨了其在不同操作系统中的具体实现方式及其对进程调度的影响。通过这些分析,读者可以更好地理解操作系统如何管理进程的不同状态以及`sleep()`函数在其中的作用。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 刷题笔记:探索乘积小于K的子数组问题 ... [详细]
  • 本文作为《Java学习笔记》的开篇,旨在为初学者提供一个全面的概览。文章首先介绍了Java的基本概念及其在编程语言中的地位,强调了Java与其他主流编程语言的共通之处,特别是其核心结构,如控制语句的重要性。通过详细的目录和前言,读者可以快速了解Java的基础知识和学习路径。此外,文章还探讨了控制语句在编程中的关键作用,为后续深入学习打下坚实基础。 ... [详细]
  • 探讨两种常数卷积的结果与一种常见的洗牌算法错误及其影响
    在编程中,随机打乱数组元素的顺序(即“洗牌”)是一个常见的需求。标准的洗牌算法是Fisher-Yates shuffle,但许多开发者在实现时容易犯错,导致结果不均匀。本文探讨了两种常数卷积的结果,并分析了一种常见的洗牌算法错误及其对随机性的影响。通过详细的实验和理论分析,我们揭示了这些错误的具体表现和潜在危害,为开发者提供改进的建议。 ... [详细]
  • Java编程实践:N皇后问题(LeetCode第51题)
    n皇后问题探讨了在n×n的棋盘上放置n个皇后,确保任意两个皇后不会互相攻击的解决方案。本文以8皇后问题为例,展示了该问题的一种可能解法。通过给定整数n,程序将返回所有不同的n皇后问题的有效布局方案。此外,文章还详细介绍了实现这一算法的具体步骤和关键技巧,帮助读者深入理解并掌握这一经典编程挑战。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
author-avatar
悉尼新鲜事儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有