![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读书笔记
文章平均质量分 88
恺风
我思故我在,如果一个人无法独立思考,即使熟习各种工具,实质只是工具的一部分,永远无法创造工具。
展开
-
读书笔记《Building embedded linux systems》Chapter 1
一直都将计算机,包括上面的软件作为工具,工具者,只求甚用,不求甚解。越到问题的时候就到网上共产主义一把。现在开始想定制linux操作系统,希望能在MID和手机这类手持移动设备中使用。必须提高理论水平。网上一搜,发现太多linux bible,比如这位OREILLY老兄。不知道能看完他老人家多少本书。格物致知,只好先格准备Building Embedded Linux Systems,原创 2009-03-06 15:08:00 · 2495 阅读 · 0 评论 -
读书笔记《Building embedded linux systems》Chapter 2
继续努力,开始学习第二章:基本概念。 对于嵌入Linux,需要先熟悉Linux系统,有很多,也将有更多的Linux系统,因此不要限制与某个单一的类型。目前最大的三个是RedHat,Novell(SLES)和ubuntu。如果我们选择流行的Linux版本作为开发平台(可以选择windows或者Unix作为workstation),一般基于Eclipse的图像开发环境。原创 2009-03-19 14:43:00 · 2292 阅读 · 0 评论 -
读书笔记《Building embedded linux system》Chapter 3 硬件支持
这几天进度比较慢,读书有些枯燥,开始看第三章:硬件支持。我看了一下第一版的CHM,不知道是不全呢还是第二版丰富了很多。 在这章中将被讨论没有MMU的结构,虽然这已经在linux 2.6版本中支持,这是对8bit的低价格微处理器,用于打印,家庭娱乐的方式,这本书不包含这些方面,针对32bit的CPU。CPU的介绍ARM:久闻大名,很多终端使用,例如iPod、iPhone。ARM使用R原创 2009-03-27 14:03:00 · 2665 阅读 · 0 评论 -
读书笔记《Building embedded linux system》Chapter 4 开发环境
toolchain这个词不好翻译,姑且译为工具链。OReilly建议,即使我们的开发机和target是相同的结构(例如都是x86),仍然建议使用通用的工具链作为跨平台的开发环境,不使用在开发机上自带的工具链,这是为了保证工具链和特定的工作站环境无关,使得工作站软件升级后不会引起在我们的嵌入式应用崩溃,另外可以使用一些针对target的更好的更有效的工具,例如另一个新的C库。有一些厂家原创 2009-04-16 15:50:00 · 1987 阅读 · 0 评论 -
读书笔记《Building embedded linux system》Chapter 5 内核思考
通用的linux提供一个已经编译好的kernel,但是在嵌入式操作系统中,这种方式比较少用。我们将提供一个尽可能简单的kernel configuration,去除我们不需要的功能。我们首先需要选择linux的kernel。我们可以在http://www.kernel.org/中得到官方(official,也成为upstream或者 mainline)的linux内核版本,他是Torva原创 2009-04-17 10:49:00 · 1877 阅读 · 0 评论 -
读书笔记《Linux Device Drivers》:第一章,设备驱动介绍
那个GMA500的倒霉驱动搞了很久,因此找到了这本书,发现是本好书,决定读一下。网上查了一下,这本的中文名字是《Linux设备驱动程序》,最新是第三版本,2005年出版的。这本书比较贵『相当地贵』,有影印版和翻印版。而且书有些老,不过也是2.6.x的版本了,决定发挥网上共产主义精神,坚决一毛不拔的环保主义精神,在http://lwn.net/Kernel/LDD3/下载下来,自己慢慢看原创 2009-07-23 17:13:00 · 2366 阅读 · 2 评论 -
kernel module编程(一):建立一个小例子
这是一个很简单的小例子hello world。也是《Linux Device Drivers》一书第二章的书读笔记。需要开发环境 为了使得内核模块可以编译,我们需要安装kernel-devel的rpm包,例如在Fedora,我们需要yum install kernel-devel。如果使用的linux版本没有提供自动安装这个包,我们需要原创 2009-07-23 10:20:00 · 14675 阅读 · 2 评论 -
[记录]编程思想(二):关于内核模块编程
对于内核模块(kernel module)编程,我们需要了解并注意下面的一些事项:中小型的应用程序包含一个完整的task,而在kernel模块中只是注册以便为未来请求提供服务,他是为以后的触发进行准备。模块是事件驱动方式。换言之,他的初始话部分程序很快就结束,不应该出现等待的状态。一般的应用程序,在结束的时候,不需要仔细地去是否资源,因为进程终结,系统会自动进行。但是在原创 2009-07-27 17:25:00 · 2335 阅读 · 0 评论 -
读书笔记《Building embedded linux system》Chapter 6 根文件系统内容
对于root fileSystem的官方描述为FHS(FileSystem hierachy Stardard)。在根目录下的最高级目录都有明确的目的,然而很多是作为多用户系统的,而嵌入式系统对这些规则的遵循可以比较松动。根目录系统/binEssential user command b原创 2009-06-07 13:26:00 · 2337 阅读 · 0 评论 -
[摘]嵌入式linux系统的开启
在各种体系结构平台上,多数内核映像都采用压缩格式(MIPS 平台例外,它的映像采用非压缩格式) 。Linux 系统的一般启动过程通常划分为内核引导、内核启动和应用程序启动3 个阶段。 第一阶段是目标板硬件初始化,解压内核映像,再跳转到内核映像入口。这部分的工作一般由目标板的引导程序和内核映像的自引导程序完成。不同体系结构的目标板引导的方式和程序都有差异。Decompress Kern原创 2009-06-11 15:48:00 · 1606 阅读 · 0 评论 -
读书笔记《Building embedded linux system》Chapter 7 存贮设备操作
最近进度有些慢,需要加快,终于在一周内看完这一章。对于嵌入式操作系统通常不使用我们的磁盘,例如使用固体盘flash chip或者disk,这个需要在kernel编译中配置并支持,同时也需要一些辅助的工具。我最大的迷惑在于我对这些闪存不熟悉(不晓),我也在学习moblin,我一直想知道MID中使用的是哪种类型的闪存,虽然我也听过SD、CF卡什么的,知道的只是它们的size和接口不一样原创 2009-06-14 23:28:00 · 1977 阅读 · 0 评论 -
读书笔记《Building embedded linux system》Chapter 8 根文件系统的建立
我些迷惑,在Ubuntu的MID的IMG,copy到USB上,并不是安装版本,而是直接使用的版本。Moblin提供的IMG,解释安装盘。对于MID来将,我需要将内容安装在MID里面的SSD,而不是插个USB的方式。由于MID的方式和普通的嵌入式板块开发一样,不使用串口、NFS,还不晓得如何将USB的内容烧进去。不过问题需要一个个解决,先让系统run起来。继续看O’Reilly的《Buildin原创 2009-06-18 15:02:00 · 3049 阅读 · 2 评论 -
kernel module编程(三):获取(分配或注册)设备号
本文也即是《Linux Device Drivers》一书第三章Char Drivers的读书笔记之一。 我们在/dev中可以查看设备节点,每个设备有一个主号码(major)以及一个副号码(minor),通常一个major号码对应某一种设备,虽然linux允许多种设备共享一个major号码。minor号码用于kernel具体进行设备的对应,kernel并不了解对应在min原创 2009-08-26 10:38:00 · 4247 阅读 · 0 评论 -
kernel module编程(四):设备属性和与上层应用的联系
本文也即是《Linux Device Drivers》一书第三章Char Drivers的读书笔记之二。 这部分开始有些觉得阴涩难懂。我上网去查,没能找到这本书的Example的例子,所以决定还是靠自己。我先写一个应用层的例子,通过这个例子来触发kernel module的一些操作,这样比较容易理解。#include #include原创 2009-08-28 16:03:00 · 3538 阅读 · 0 评论 -
读书笔记《Building Embeded Linux System》第九章建立Bootloader
不同类型的Bootlader 基于x86的PC机器,通常使用LILO或者GRUB。这些系统含有固件(常说的BIOS),是对于各主要系统元件的程序,例如初始化RAM控制器,取保CPU在某个特定的状态,提供很多信息给OS,例如传统的BIOS calls,ACPI table等等,这些linux的bootloader只需要从存储介质中加载kernel image(也可能原创 2009-06-23 15:36:00 · 2535 阅读 · 0 评论 -
kernel module编程(五):设备读写
本文也即是《Linux Device Drivers》一书第三章Char Drivers的读书笔记之三。 这次进度有点慢,在上一次中,我们可以open和close,这次我们学习read和write。先补充一下用户测试小程序。我们增加读写的测试。先写后读。#include #include #include int main(int ar原创 2009-08-31 16:42:00 · 3935 阅读 · 0 评论 -
kernel module编程(六):printk-printf的debug
本文包含《Linux Device Drivers》,即LDD3的第四章:Debugging Techniques的读书笔记之一,但我们不限于此内容。我在网上看到了LDD3的中文版:http://www.deansys.com/doc/ldd3/,我看了一下,最好和原文版一起阅读。 在我们的程序的调测中,无论是JAVA,C(kernel module或者是用户原创 2009-09-09 09:38:00 · 7699 阅读 · 0 评论 -
kernel module编程(七):通过读取proc文件进行debug
本文也即《Linux Device Drivers》,LDD3的第四章Debuging Techniques的读书笔记之二,但我们不限于此内容。 在linux中,例如读取CPU,可以使用cat /proc/cpuinfo,通过这个我们可以在程序中采用读文件的方式获取CPU,这种大容量高性能的服务中非常常用,例如在cpu大于60%的时候,我们将拒绝所有的业务请求,直至cpu恢复到40%原创 2009-09-15 17:18:00 · 4563 阅读 · 0 评论 -
Linux Bash Shell学习(一):开始看书《Learning the bash Shell,3rd》
本文也即《Learning the bash Shell》3rd Edition的前言之读书笔记。但我们将不限于此。 Bash即Bourne Again shell,可以通过下面查询机器的bash版本:[wei@wei bash-script]$ echo $BASH_VERSION3.2.39(1)-release 这和书中介绍的2004原创 2009-09-16 14:45:00 · 7724 阅读 · 1 评论 -
kernel module编程(八):读取proc文件之seq_file
本文也即《Linux Device Drivers》,LDD3的第四章Debuging Techniques的读书笔记之三,但我们不限于此内容。 在上次我们使用了read_proc的方式通过/proc文件读取kernel module的信息。作者给的例子他自己说是ugly。而我们在读取大量数据时发现,受到用户buffer大小的限制(page的大小),可能需要读取多次,不仅需要记录上次原创 2009-09-18 15:06:00 · 7338 阅读 · 1 评论 -
Linux Bash Shell学习(二):目录和通配符
我们继续看书。本文也即《Learning the bash Shell》3rd Edition的第一章 bash Basics之读书笔记之一。但我们将不限于此。 先讲历史:第一个重要的shell是Bourne shell,他在1979年Unix version7中加入,即sh,很多UNIX的应用的管理仍然依赖它。第一个广泛使用的其他shell是几年后C shell,因为他和C编程有些原创 2009-09-21 16:51:00 · 8439 阅读 · 0 评论 -
kernel module编程(九):通过用户程序的strace检查内核模块调用情况
本文也即《Linux Device Drivers》,LDD3的第四章Debuging Techniques的读书笔记之四,但我们不限于此内容。 由于最近比较忙,赶文档,这么多天没看两页纸。前两天来个老外,forgive my poor English。和他到我们饭堂吃饭,还有几个同事坐在一起,一同六个人,5个人拿匙羹,一个人用筷子,用筷子的人是老外…… 在前面我们学习了两种通原创 2009-09-29 15:20:00 · 3522 阅读 · 0 评论 -
Linux Bash Shell学习(三):基本I/O操作、特殊字符、控制键和帮助
本文也即《Learning the bash Shell》3rd Edition的第一章 bash Basics之读书笔记之二。但我们将不限于此。用linux就会用bash,一直没有系统地学过,所以来看看书。一些I/O操作 Linux的I/O有两个特点,一、I/O分为character和block两类;二、所有的产生和接收数据都可以视为file。而就是说这些I/O操作都可原创 2009-09-21 21:29:00 · 5461 阅读 · 2 评论 -
Linux Bash Shell学习(四):编辑命令
本文也即《Learning the bash Shell》3rd Edition的第二章 Command-Line Editing之读书笔记。但我们将不限于此。 我一般的使用方式,就是直接敲,如果敲错了,用左右光标箭回去修改,或者使用上下光标键直接使用以前的命令或在以前的命令进行修改。似乎仅此而已。我用vi,几乎不使用emacs。这本书的作者说可以如同使用vi或者emacs那样编译命原创 2009-10-07 22:10:00 · 6046 阅读 · 0 评论 -
kernel module编程(十):查看错误
本文也即《Linux Device Drivers》,LDD3的第四章Debuging Techniques的读书笔记之五,但我们不限于此内容。 开发中我们不能避免在执行驱动时引起系统fault,但fault并不意味就是panic,Linux还是robust的,对于驱动,通常只引起正在使用该驱动的进程死掉,kernel在任何一个打开设备的进程死掉的时候会调用close开进行释放。虽然原创 2009-10-10 11:11:00 · 5526 阅读 · 0 评论 -
kernel module编程(十一):使用gdb以及其他调测工具
本文也即《Linux Device Drivers》,LDD3的第四章Debuging Techniques的读书笔记之六,但我们不限于此内容。这章看得比较慢,最近比较懒,而陷入了文档工作中,我决定这章节不会有之七,在之六打住。 在用户程序中,有很多编译工具同提供的debug工具,用于设置断点或者单步跟踪,但是在kernel程序中是很困难的。LDD3介绍了gdb对于kernel模原创 2009-10-15 10:51:00 · 8056 阅读 · 1 评论 -
Linux Bash Shell学习(十七):I/O重定向
本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之读书笔记之一。我们曾经学习过shell的基本IO重定向操作:>、cmd1|cmd2: pipe,将cmd1的标准输出作为cmd2的标准输入 >file:将标准原创 2010-01-16 22:47:00 · 16129 阅读 · 0 评论 -
Kernel module编程(十二):并发和竞争控制
本文也即《Linux Device Drivers》,LDD3的第五章Concurrency and Race Conditions的读书笔记之一,但我们不限于此内容,最近正在整理移动手机的业务需求,比较多的文档工作,没什么时间学习。有本好书推荐一下,就是钱穆先生的《中国历代政治得失》,书很薄,但是内容很丰富,推荐推荐。 并发引发的bug是OS程序中一个主要的问题并且很难发现原创 2009-11-26 15:28:00 · 2461 阅读 · 0 评论 -
Linux Bash Shell学习(五):特殊文件、别名、选项和参数
本文也即《Learning the bash Shell》3rd Edition的第三章Customizing Your Environment之读书笔记,但我们将不限于此。设置一个好的用户环境,对我们开发是非常关键的。在这一章节中,从四个方面进行介绍:特别的文件,别名,选项,参数。特殊文件 在用户目录下有几个特殊的文件,可以用ls -a来查看这些隐藏的系原创 2009-12-01 21:03:00 · 5749 阅读 · 0 评论 -
Kernel module编程(十三):信号量、互斥锁、读写信号量和完成量
本文也即《Linux Device Drivers》,LDD3的第五章Concurrency and Race Conditions的读书笔记之二,但我们不限于此内容。信号量(Semaphore)信号量和互斥锁 Kernel提供不同的原语来处理不同的情况,最常用的是采用信号量的方式。如果不能获得资源将进入sleep状态,等待资源释放,也即block的方式。通过原创 2009-12-01 21:18:00 · 8378 阅读 · 0 评论 -
Linux Bash Shell学习(六):设置环境参数
续Linux Bash学习(五):特殊文件、别名、选项和参数 本文也即《Learning the bash Shell》3rd Edition的第三章Customizing Your Environment之读书笔记二,但我们将不限于此。设置一个好的用户环境,对我们开发是非常关键的。在这一章节中,从四个方面进行介绍:特别的文件,别名,选项,参数。上回学习到参数设定的部分。继续…原创 2009-12-12 22:51:00 · 10385 阅读 · 1 评论 -
Linux Bash Shell学习(十八):String I/O——echo和printf
本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之读书笔记之二。echo echo是非常常用的shell命令。参数如下:-e:打开反斜杠字符backslash-escaped的解析,即对/n,/t等字符进行解析,而不视之为两个字符原创 2010-02-15 10:55:00 · 15023 阅读 · 0 评论 -
Linux Bash Shell学习(七):shell编程基础——运行Shell脚本、function
本文也即《Learning the bash Shell》3rd Edition的第四章Basic Shell Programming之读书笔记,但我们将不限于此。运行shell脚本程序 一个包含shell命令的脚本就是一个shell程序,例如.bash_profile。我们创建shell脚本,允许的时候可以通过两种方式:一、source ;二、只敲入文件原创 2009-12-15 23:32:00 · 26047 阅读 · 1 评论 -
Linux Bash Shell学习(十九):String I/O——read
本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之读书笔记之三。我们的目的是把书读薄。 之前学习的echo和printf都是写,读使用read,格式为:read var1 var2... 多个参数值的读取,采用IFS。如果我原创 2010-02-25 16:36:00 · 10484 阅读 · 0 评论 -
Linux Bash Shell学习(八):shell编程基础——string操作
本文也即《Learning the bash Shell》3rd Edition的第四章Basic Shell Programming之读书笔记之二,但我们将不限于此。String操作 在下面的描述中,“:”是可以删除的,存在是表示“存在但不允许为null”,不带“:”表示“存在”,即允许为空:${varname:-word}原创 2009-12-21 13:27:00 · 20534 阅读 · 1 评论 -
Linux Bash Shell学习(九):流程控制——if/else
本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了bash。在这里,我们将学习他们。 if/else是通过判断选择执行或者执行部分代码,可以根据变量、文件名、命令是否执行成功等很多条件进行判断,他的格式如下:if c原创 2009-12-22 02:17:00 · 160770 阅读 · 1 评论 -
Linux Bash Shell学习(十):流程控制——for
本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记之二,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了bash。在这里,我们将继续学习他们。 和C不一样的是,在shell中是匹配list中的元素,因此非常适合用于命令的参数,文件列表。for格式如下:for name [原创 2009-12-28 22:05:00 · 5696 阅读 · 0 评论 -
Linux Bash Shell学习(十一):流程控制——case
本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记之三,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了case。在这里,我们将继续学习他们。 case通过检测字符串的样式是否匹配,数目是否相等,进行相应不同的处理。将if-then-else的结构修改为更好的阅读方式,格式如下:原创 2009-12-29 17:13:00 · 12853 阅读 · 0 评论 -
Linux Bash Shell学习(十二):流程控制——select
本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记之四,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了case。在这里,我们将继续学习他们。 select和其他流控制不一样,在C这类变成语言中没有类似的语句(C中的select用于socket,是完全不同的含义,不是流控制)。格式原创 2009-12-29 21:57:00 · 12440 阅读 · 0 评论 -
Linux Bash Shell学习(十四):命令行选项
本文也即《Learning the bash Shell》3rd Edition的第六章Command-Line Options and Typed varilables之读书笔记之一,但我们将不限于此。 在Linux命令中经常带有参数例如[-option]等等。在命令行中可能有0个或者多个这些选项。我们在之前学习了位置参数,包括$1,$2,$3…,$*,$#,参见Linux Bas原创 2010-01-03 22:17:00 · 10668 阅读 · 0 评论