学习linux底层驱动开发有啥经典的参考书?

author author     2023-02-15     652

关键词:

结构、操作系统、体系结构、编译原理、计算机网络你全修过

我想大概可以分为4个阶段,水平从低到高
从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码

其中学习linux常用命令时就要学会自己编译内核,优化系统,调整参数

安装和常用命令书太多了,找本稍微详细点的就ok,其间需要学会正则表达式

系统编程推荐《高级unix环境编程》,黑话叫APUE
还有《unix网络编程》
这时候大概还需要看资料理解elf文件格式,连接器和加载器,cmu的一本教材中文名为《深入理解计算机系统》比较好

内核开发阅读内核源码阶段,从写驱动入手逐渐深入linux内核开发
参考书如下《linux device drivers》,黑话叫ldd
《linux kernel development》,黑话叫lkd
《understading the linux kernel》,黑话叫utlk
《linux源码情景分析》
这四本书为搞内核的必读书籍

最后,第三阶段和第四阶段最重动手,空言无益,光看书也不罩,不动手那些东西理解不了

学习linux/unix编程方法的建议

建议学习路径:

首先先学学编辑器,vim, emacs什么的都行。
然后学make file文件,只要知道一点就行,这样就可以准备编程序了。

然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。

如果想学习UNIX/LINUX的编程,《APUE》绝对经典的教材,加深一下功底,学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。

然后再看Douglus E. Comer的《用TCP/IP进行网际互连》第一卷,学习一下网络的知识,再看《UNP》的第一卷,不仅学习网络编程,而且对系统编程的一些常用的技巧就很熟悉了,如果继续网络编程,建议看《TCP/IP进行网际互连》的第三卷,里面有很多关于应用协议telnet、ftp等协议的编程。
如果想写设备驱动程序,首先您的系统编程的接口比如文件、IPC等必须要熟知了,再学习《LDD》2。

对于几本经典教材的评价:

《The C Programing Language》K&R 经典的C语言程序设计教材,作者是C语言的发明者,教材内容深入浅出。虽然有点老,但是必备的一本手册,现在有时候我还常翻翻。篇幅比较小,但是每看一遍,就有一遍的收获。另外也可用谭浩强的《C语言程序设计》代替。

《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常经典的书(废话,Stevens的书哪有不经典的!),虽然初学者就可以看,但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样,现在有影印版,直接读英文比读中文来得容易。

《Unix Network Programing》W.Richard Stevens:第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的,不过现在一般都用BSD Socket,所以这本书只要看大约一半多就可以了。第二卷没有设计到网络的东西,主要讲进程间通讯和Posix线程。所以看了《APUE》以后,就可以看它了,基本上系统的东西就由《APUE》和《UNP》vol2概括了。看过《UNP》以后,您就会知道系统编程的绝大部分编程技巧,即使卷一是讲网络编程的。国内是清华翻译得《Unix网络编程》,翻译者得功底也比较高,翻译地比较好。所以建议还是看中文版。

《TCP/IP祥解》一共三卷,卷一讲协议,卷二讲实现,卷三讲编程应用。我没有怎么看过。,但是据说也很经典的,因为我没有时间看卷二,所以不便评价。

《用TCP/IP进行网际互连》Douglus.E.Comer 一共三卷,卷一讲原理,卷二讲实现,卷三讲高级协议。感觉上这一套要比Stevens的那一套要好,就连Stevens也不得不承认它的第一卷非常经典。事实上,第一卷即使你没有一点网络的知识,看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用,因为作者本身就是一位教师,并且卷一是国外研究生的教材。习题并没有答案,留给读者思考,因为问题得答案可以让你成为一个中级的Hacker,这些问题的答案可以象Douglus索取,不过只有他只给教师卷二我没有怎么看,卷三可以作为参考手册,其中地例子也很经典。如果您看过Qterm的源代码,就会知道Qterm的telnet 实现部分大多数就是从这本书的源代码过来的。对于网络原理的书,我推荐它,而不是Stevens的《TCP/IP祥解》。

《Operating System - Design and Implement》这个是讲操作系统的书,用Minix做的例子。作者母语不是英文,所以英文看起来比较晦涩。国内翻译的是《操作系统设计与实现》,我没看过中文版,因为翻译者是尤晋元,他翻译的《APUE》已经让我失望头顶了。读了这本书,对操作系统的底层怎么工作的就会
有一个清晰的认识。

《Linux Device Driver》2e ,为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱,如果您没有一些写驱动的经验,初次看会有些摸不着南北。国内翻译的是《Linux设备驱动程序》第二版,第一版,第二版的译者我都有很深的接触,不过总体上来说,虽然第二版翻译的有些不尽人意,但是相比第一版来说已经超出了一大截。要读这一本书,至少应该先找一些《计算机原理》《计算机体系结构》的书来马马虎虎读读,至少应该对硬件和计算机的工作过程有一些了解。
参考技术A 《linux设备驱动程序》
现在应该是第三版了
写驱动的圣经啊
参考技术B 嵌入式驱动开发圣经 参考技术C 《linux设备驱动程序》百度文库里能直接下载免费电子书,中文的 参考技术D gdk128说的对,从他的名字就知道,gdk

linux学习资料整理

Linux免费学习资料整理linux基础(系列课程)快速上手linuxLinux网络经典案例Linux网络高并发技术之epolllinux之C语言内存管理Linux网络聊天室设计Linux开发调试技巧linux高级Linux中网络通信协议分析GUI开发Linux中POLL机制高并发编... 查看详情

linux驱动开发与linux嵌入式开发都有哪些相同点和不同点?两者都要学的基础知识都有哪些?

...,操作系统,驱动架构,硬件知识等。网上有很多嵌入式学习方面的书单整理,你看看就知道了。 参考技术C驱动开发需要对硬件有一些基础,而嵌入式开发是纯应用的。两者都需要linux系统基础操作。 参考技术D基本没有区别,... 查看详情

在android中可以封装某个函数给其他人员进行底层驱动开发吗?

...植实战详解》适合Android程序员、研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 参考技术BLinux系统什么库函数进行封装 参考技术C电源还是在 查看详情

嵌入式开发工程师学习线路

 一、核心学习课程  1、应用软件基础      Linux基础      C语言  2、底层驱动程序开发      ARM编程(ARM体系结构、ARM汇编、开发板常见的外设裸机编程)      Linux驱动开发二、Android扩展... 查看详情

linux中设备和驱动到底有啥区别,有啥联系啊?学习2.6的内核,搞得好晕呢!

...是要学驱动还是kerenl?学kernel的话2.6版本太高了(若只是学习代码修改修改除外),很多东西隐藏太深不易理解啊!追问重点想学习驱动,不知道什么水平才能作为linux驱动工程师啊?参考技术A2.6.x版本的内核,核心部分变动不大... 查看详情

linux内核开发与linux驱动开发有啥关系?

我做过驱动开发,说说我的看法。本质上说Linux内核开发和Linux驱动开发是不一样的,或者说驱动开发是内核开发的一部分,因为驱动属于内核。目前国内驱动开发和内核开发一般是一样的。有对应linux内核开发工程师和linux驱动... 查看详情

嵌入式开发工程师学习线路图

一、核心学习课程  1、应用软件基础      Linux基础      C语言  2、底层驱动程序开发      ARM编程(ARM体系结构、ARM汇编、开发板常见的外设裸机编程)      Linux驱动开发二、Android扩展  ... 查看详情

bsp开发学习2平台设备驱动(代码片段)

文章目录Linux设备驱动模型Linux中的设备驱动模型组成为什么要使用设备驱动模型设备驱动模型的底层架构sysfs目录kobjectkobj_typekset设备驱动模型三大组件总线设备驱动平台设备驱动概述平台设备驱动工作原理核心变量与函数工作... 查看详情

嵌入式linux驱动程序开发学习路线?

...机,C语言、QT,Linux常用命令等。但是不知道怎么系统的学习嵌入式Linux。目前的知识点非常零散,只会修改别人的驱动,出了问题就不会解决了,希望能给个大概的路线。关于这个方向,我认为大概分3个阶段:1、嵌入式linux上... 查看详情

嵌入式linux怎么学

首先学习linux应用,熟练使用linux命令行,建立起对linux系统的大概了解;然手学习linux内核原理,可以先学习个三分熟(推荐书籍:《LKD--linux内核开发》《ULK-深入理解linux内核》《LDD-linux驱动开发),同时要学习c语言,学习基... 查看详情

linux驱动开发学习路线规划

Linux驱动开发学习路线规划关于Linux驱动开发路线学习的一个规划,学习内容以博客形式记录,打钩的表示学习完成入门操作篇:Linux常用指令vim编辑器使用Makefile基础语法shell基础语法总结文章:Linux驱动开发系列&... 查看详情

linux下驱动开发_块设备驱动开发(内存模拟存储)

...作目录的命令都会通过文件系统,通过块设备驱动完成对底层存储设备的访问,实现数据读取或者写入。所以大致总结下:块设备驱动的目的是给Linux文件系统提供底层接口。二、编写块设备驱动的思路既然学到了驱动开 查看详情

unity有啥特点

...发语言C#相对于C/C++更简单,而且unity的使用已相对成熟,学习视频较多5、支持ARVR,U3D是实现ARVR最主流的开发引擎对于零基础学习游戏开发的话,建议还是考虑学习unity引擎,入门更容易,应用的也更加广泛。优就业课程内容围... 查看详情

linux应用开发和linux内核开发有区别吗,哪个有前途

...性的,跟人的需求关系有关系。linux内核开发是开发系统底层的软件开发,用硬件关系很大,主要跟底层的硬件有关,比如:操作寄存器,驱动一些模块等。底层较难,主要跟兴趣有关,linux内核开发的前途很好,转行业比较好转... 查看详情

求教怎么学习linux内核驱动

1.首先要了解为什么要学习内核?下图已表明,如果要从事驱动开发或系统研究,就要学习内核。2.内核的知识就像下面的绳结一样,一环扣一环,我们要解开它们,就必须要先找到线头也就是内核中的函数接口。初学阶段,我... 查看详情

linux驱动开发笔记:helloworld驱动源码编写makefile编写以及驱动编译基本流程(代码片段)

前言  基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发。 笔者自身情况  笔者拥有硬件基础,单片机软硬基础,linux系统基础等各种,就... 查看详情

学习c#编程经典书籍

...aNutshell》:由JosephAlbahari和BenAlbahari编写,是C#语言的权威参考书,详细介绍了C#的语法、类库和最佳实践。5.《HeadFirstC#》(第3版):由AndrewStellman和JenniferGreene编写,采用图文并茂的方式,生动有趣地讲解了C#语言的基础知识和... 查看详情

linux下写的sd驱动,android怎么调用?

通过jNI,java可以调用底层的c++代码。参考技术ASD驱动是和内核连在一起的,可以说是内核的一部分,Android的开发工具是eclipse不能直接调内核。要用sorceInsight修改内核,编译后运行Linux系统,这样来调。 参考技术Bopen后,使用。 查看详情