|
Java电子书:嵌入式Linux设备驱动程序开发指南(原书第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com( G# m! x6 q+ G& W
5 G2 t9 i! |( K6 u% K; H2 |2 N1 I
! \! z# v! T1 g8 |
编号:mudaima-P0320【Java吧 java8.com】( m3 N6 r) i" p* g
; n) K% m& ~8 M" N- V$ d
& M" I- J( W( y
* W- q; m% V7 L4 wJava电子书目录:第1章 构建系统1
$ Y6 x1 Q2 j" b: l$ M5 `7 j1.1 引导加载程序1# x' l0 i1 O" ?4 \) q# k
1.2 Linux内核3
) U& v% z- s' }7 J3 p3 o3 b1.3 系统调用接口和C运行时库6% ?+ O# Y6 S$ U9 s D$ n+ [. C' J
1.4 系统共享库7
$ X9 i/ m' W# c1 ]; j. b! H% v6 {( \1.5 根文件系统8
5 F/ W5 A: D I' ~( c* e1.6 Linux启动过程9
( r m# M( q8 Z5 e( V3 H! p: m1.7 构建嵌入式Linux系统10
2 I8 M2 \' W! L, ~8 ]1.8 设置以太网通信11/ | I6 t- {- ?* z0 ]0 x" c: X
1.9 为NXP i.MX7D处理器构建嵌入式Linux系统110 x: A3 A& K2 U- h1 I! ?* H- F
1.9.1 简介12
. T3 a5 _/ U4 n, ^+ {' X- p1.9.2 主机软件包12% ?' d& J! N5 n# w" s+ ^
1.9.3 设置repo工具13
: X; S; s. U7 Z6 _3 o/ l1.9.4 Yocto工程的安装和映像构建13" c* N6 r4 q. U6 ], ?0 u( \
1.9.5 Yocto 之外的工作15# |, C7 d ]% r
1.9.6 构建Linux内核18; F# K3 @3 H3 s! q) O: B% J6 r
1.9.7 安装TFTP服务器20
V) e" j- ]0 C1.9.8 安装NFS服务器20% z$ \5 y4 q: ?9 m M# U
1.9.9 设置U-Boot环境变量21) @' E' W2 z6 `8 _) o+ H: c1 Z* g- n
1.10 为Microchip SAMA5D2处理器构建嵌入式Linux系统21, v9 r; P7 B9 T
1.10.1 简介22
6 j$ z; @9 i6 y3 F5 u1.10.2 主机软件包22
l8 j5 ]+ [/ _; t' O6 Z1.10.3 Yocto工程的安装和映像构建220 e7 O* x- Q/ B* g3 M& c
1.10.4 Yocto 之外的工作25
' ]: J' n6 P/ G7 J2 w1.10.5 构建Linux内核25
. e& l$ w) _9 U3 q1.10.6 安装TFTP服务器27: x4 @: {0 P% _3 j" j. }
1.10.7 安装NFS服务器27( K( }9 P" }" m( s$ O5 t9 ^1 j
1.10.8 设置U-Boot环境变量28
$ S3 ?7 [: ~% ?! w* u/ e1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统28. R/ Z% [+ g, @# ?
1.11.1 Raspbian280 e5 O5 M; T- z4 K5 p0 Z4 V" f
1.11.2 构建Linux内核297 L! |7 u2 O6 H/ I$ e5 m
1.11.3 将文件复制到Raspberry Pi31
" d6 g0 o9 r# c- }! V, L- i; c1.12 使用Eclipse33
+ |: ~/ O* k7 r/ z6 Y A, g! V2 x1.12.1 用于内核源码的Eclipse配置33- c* G. w& q& w) I& `& I0 w
1.12.2 用于开发Linux驱动程序的Eclipse配置383 \ n: o$ v0 p( O
第2章 Linux设备与驱动模型42
+ h$ n( M; I. N9 u2.1 总线核心驱动42
! g4 O( B& G! k3 n2.2 总线控制器驱动45
* L! \1 T+ @$ x9 T2 u2.3 设备驱动456 ^4 M2 D3 d( y& P( a" Z! y7 |
2.4 设备树简介460 `3 X$ W- ]2 M& e4 R, S
第3章 简驱动程序50
2 p2 ], b' ^' B5 a' K1 A5 a! n2 V3.1 许可证51
5 H8 `1 z: {: E- y3.2 实验3-1:“helloworld”模块518 a, N7 L- u6 [( {" x9 ]. G( `* k; k2 ^
3.3 代码清单3-1:helloworld_imx.c52
; O& s; h+ g$ i3.4 代码清单3-2:Makefile52
- P3 M! P" J5 a; P6 }3.5 helloworld_imx.ko演示539 U" ^7 l5 p& J+ R4 A3 D
3.6 实验3-2:“带参数的helloworld”模块536 b( [0 P7 P. Y% t
3.7 代码清单3-3:helloworld_imx_with_parameters.c54% J7 b7 K, o G
3.8 helloworld_imx_with_parameters.ko演示54& u7 `. L- q* F7 s- I4 p7 M) Q! Q0 Y
3.9 实验3-3:“helloworld计时”模块55* x9 L% t! s$ v/ x4 E
3.10 代码清单3-4:helloworld_imx_with_timing.c558 G6 {- W! G( e/ Z2 i z& _
3.11 helloworld_imx_with_timing.ko演示56/ m& e/ k' t) j7 u; z' `. _% Q
第4章 字符设备驱动57
; C9 l0 Z6 O% L9 A4 R4.1 实验4-1:“helloworld字符设备”模块59
/ N4 `, z' R% _, n( E4.2 代码清单4-1:helloworld_imx_char_driver.c63
. ?: B* g) Q& n" {4.3 代码清单4-2:Makefile65. F) {8 T' f: W1 ?- A0 G! `/ b
4.4 代码清单 4-3:ioctl_test.c65
4 [5 `3 \% P0 O1 v* A4.5 helloworld_imx_char_driver.ko演示666 h( U7 j, k5 F9 M$ t
4.6 将模块添加到内核构建66
) ^ @* O, K" Q: p L4.7 使用设备文件系统创建设备文件671 W# w( l3 [- M; U4 _: I
4.8 实验4-2:“class字符设备”模块68
6 m: X4 M5 \- |- l! B5 a4.9 代码清单4-4:helloworld_imx_class_driver.c70+ Y3 ]& N6 `0 F6 ^- { x
4.10 helloworld_imx_class_driver.ko演示72
4 ]* K3 w$ N% y' }. @7 p* T, j4.11 杂项字符设备驱动72, O# ~2 ^& y0 R2 G8 p$ t% s' c8 f
4.12 实验4-3:“杂项字符设备”模块73- _5 ]3 F' Q% X5 _: T/ H7 h
4.13 代码清单4-5:misc_imx_driver.c74
- _3 } q( X- Q& z& l4.14 misc_imx_driver.ko演示75
H. ]- c& F* j第5章 平台设备驱动764 p1 {) Q6 j+ O
5.1 实验5-1:“平台设备”模块78
( o+ C! e6 Z; g; x5.2 代码清单5-1:hellokeys_imx.c813 z+ d3 U, R H c
5.3 hellokeys_imx.ko演示82; N g! X. ~9 M
5.4 操作硬件的文档82
2 E6 N6 m) X( F, `5.5 硬件命名约定83# ]" l. V H( ~6 r; }" {
5.6 引脚控制器84* j: N# M7 I' u# M6 z
5.7 引脚控制子系统86' V9 {# b- p* A* p" h2 r
5.8 设备树引脚控制器绑定92) z# z1 h6 m! g6 U
5.9 GPIO 控制器驱动964 _2 m( u9 d4 } F3 a
5.10 GPIO描述符使用者接口983 f. z; V/ X' ^% l% a) u
5.10.1 获取和释放GPIO98
7 }: v4 C) k0 p' B7 ^5.10.2 使用GPIO993 G A5 x$ H: k& l- s1 p
5.10.3 GPIO映射到中断99
! b+ `: N& Z1 X7 y$ u5.10.4 GPIO设备树1008 W' p) s* h4 D; W6 Y& M* r
5.11 在内核和用户态之间交换数据100* d. p8 \7 ^4 s: a* C
5.12 MMIO(内存映射I/O)设备访问1010 M: H+ r% d8 v4 Q5 j5 A. F" y
5.13 实验5-2:“RGB LED平台设备”模块103) {5 |$ {# V: g
5.13.1 i.MX7D处理器的硬件描述103- w+ |% e5 I5 `- j3 C" h- U% j: V
5.13.2 SAMA5D2处理器的硬件描述105; |0 f1 p: I7 T; r
5.13.3 BCM2837处理器的硬件描述107+ Z/ P: F( g( q5 q/ ?+ ]
5.13.4 i.MX7D处理器的设备树1070 w3 w5 \0 `* v; [5 A
5.13.5 SAMA5D2处理器的设备树1117 }& k3 p+ C; }( Z; ]3 a$ V
5.13.6 BCM2837处理器的设备树114! {. ]* k H' g
5.13.7 “RGB LED平台设备”模块的代码描述1150 [, B; C0 K1 o- {
5.14 代码清单5-2:ledRGB_sam_platform.c119
9 O Q8 j4 _+ x& R5.15 ledRGB_sam_platform.ko演示124
3 J, Q8 \9 O9 [5.16 平台驱动资源124
! ^4 h* Z: D' _* j( z2 D5.17 Linux LED类126! y8 N$ w8 |' k, V: G. g9 P
5.18 实验5-3:“RGB LED类”模块128
- K6 F! h- x7 d( s/ l5.18.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树128& Y6 s8 u8 i$ h! i
5.18.2 “RGB LED类”模块的代码描述130
, E n) z2 K" H3 P1 ^5.19 代码清单5.3:ledRGB_sam_class_platform.c1342 \/ p6 \3 a/ a1 z5 L7 ?5 j# h
5.20 ledRGB_sam_class_platform.ko演示137
4 o. x8 L6 V; H0 X" D; U+ F7 A6 i" w9 a5.21 用户态中的平台设备驱动137
" e& ?) e3 a) ~3 n1 h5.22 用户定义的I/O:UIO139& A% M i* A# @& `( t
5.22.1 UIO如何运转140. H% `) m* x5 u: l# _7 t/ Q8 q- B6 T
5.22.2 内核中的UIO API141
4 h' o- a, c# |4 f1 S5.23 实验5-4:“LED UIO平台”模块142# g3 o4 T2 I4 u" q, a0 A Q
5.23.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树143
8 Y6 s+ M- L. |0 Y4 x5.23.2 “LED UIO平台”模块的代码描述144+ ?# a. [9 }: X. C) h7 Z1 F
5.24 代码清单5-4:led_sam_UIO_platform.c1463 h8 V1 o& s ^$ h- _$ D& F7 C, ]
5.25 代码清单5-5:UIO_app.c148
) O; e* [& N( i4 W+ L0 g' L5.26 led_sam_UIO_platform.ko及UIO_app演示150
& q" P$ ^9 U6 b9 _9 l# U6 y第6章 I2C从端驱动151
8 R& K* k A+ ^0 I' B' z6.1 Linux I2C 子系统1524 J) D$ x1 ~7 b7 f* P; Z
6.2 编写I2C 从端驱动155) x3 P6 z; U8 n& l, b9 J5 s! Z
6.2.1 注册I2C从端驱动155
9 }1 [8 w, w* m6 A6.2.2 在设备树中声明I2C设备157
( B! P D2 a# m/ E0 q6.3 实验6-1:“I2C I/O 扩展设备”模块159
b8 t" C1 A& b' F6.3.1 i.MX7D处理器的硬件描述1593 n9 I; m. {+ M8 u
6.3.2 SAMA5D2 处理器的硬件描述159
: M% g/ J6 N1 f5 b6.3.3 BCM2837处理器的硬件描述160( d0 l1 o- @- m6 n" [. v
6.3.4 i.MX7D处理器的设备树161
}; n" V1 i$ N4 E9 Z6.3.5 SAMA5D2处理器的设备树162& z6 T" I, M, F D
6.3.6 BCM2837处理器的设备树163
& h9 {6 Z: U9 n( p4 k" Z6.3.7 “I2C I/O扩展设备”模块的代码描述164
, q7 p$ x7 b/ S1 v5 g5 r4 V6.4 代码清单6-1:io_imx_expander.c1672 d( L1 d+ m; G y& A. O
6.5 io_imx_expander.ko演示170
, E7 `' A( K: {- ]' m/ ~7 f6.6 sysfs文件系统171
/ e# ]8 C! l; w# F, U% N6.7 实验6-2:“I2C多显LED”模块1748 x( u& d( V! y- j# m2 R
6.7.1 i.MX7D处理器的硬件描述175& K8 y: @+ J1 S6 O
6.7.2 SAMA5D2处理器的硬件描述176
( k- r- ]8 l2 N# O) D6.7.3 BCM2837处理器的硬件描述176
2 M1 s3 q0 S1 j( m) G2 I0 t2 E! f( o6.7.4 i.MX7D处理器的设备树177' n; ?0 c" U0 r( r' D* q
6.7.5 SAMA5D2处理器的设备树178* r# J' u3 L; E; e) f
6.7.6 BCM2837处理器的设备树180' V) P/ _2 P* M
6.7.7 ACPI和设备树的统一设备属性接口181
7 f+ B6 P+ [7 y1 j4 l6.7.8 “I2C多显LED”模块的代码描述1825 m* N2 R0 K/ Y* J
6.8 代码清单6-2:ltc3206_imx_led_class.c186- [( @( n Z6 R
6.9 ltc3206_imx_led_class.ko演示192
5 l- ^2 o$ O9 A4 q第7章 处理设备驱动中的中断194( N/ [* l' g! }# l
7.1 GPIO控制器在Linux内核的中断域196
3 v2 r' O# A" U6 N; s: l& J- Z7.2 设备树中断处理203" E7 f0 J: u1 R+ U( o9 Y
7.3 在Linux设备驱动中申请中断206. A1 v0 ?! N# Z. \2 L
7.4 实验7-1:“按钮中断设备”模块207$ |( u/ B: x# z0 k( b! _2 e
7.4.1 i.MX7D处理器的硬件描述2084 @$ t! H" z5 f/ j5 r
7.4.2 SAMA5D2处理器的硬件描述208
9 A- {9 \% i) p3 Y. W* q7.4.3 BCM2837处理器的硬件描述208; U0 I/ i6 |9 X4 K) c( n
7.4.4 i.MX7D 处理器的设备树2088 J5 |. i8 D! r; \% o
7.4.5 SAMA5D2 处理器的设备树209
. h/ b9 d) K6 m7.4.6 BCM2837 处理器的设备树210* e" A, s2 }. j% M# ^, @7 F
7.4.7 “按钮中断设备”模块的代码描述211
% ] H6 E; p G9 a! X2 C6 M7.5 代码清单7-1:int_imx_key.c213
$ F5 v6 c/ P' N8 b7.6 int_imx_key.ko演示215. D0 b5 a& G' Y' F0 L' H
7.7 延迟工作215) g9 L: M0 W g" N
7.7.1 软中断216
2 W% Y d* P0 x* \9 l7.7.2 tasklet2174 t% I2 C: {0 B2 I% z6 @0 m8 F3 \
7.7.3 定时器218
0 b6 x2 w7 u# A; V5 R7.7.4 线程化的中断221+ C# j; |+ d0 z7 _
7.7.5 工作队列223
9 T' [5 V7 m$ [0 Z7.8 内核中的锁226
& U7 a# V/ `' z6 \7.8.1 锁和单处理器内核227) |' j- |9 ~; n- |
7.8.2 在中断和进程上下文之间共享自旋锁227$ i# l- Q4 J% k
7.8.3 在用户上下文使用锁2278 m4 Y+ y& F6 @! @# _8 u+ v( S: A7 O
7.9 内核中的睡眠228
" ?: B( m: ~9 D4 k7.10 实验7-2:“睡眠设备”模块229
( E4 ?7 N2 [2 z; s, a6 {7.10.1 i.MX7D处理器的设备树230
$ N: N; f# i. ?$ |0 i2 p5 z7.10.2 SAMA5D2处理器的设备树231
( c3 S. b2 q. k, v7 T% H6 P+ ^7.10.3 BCM2837处理器的设备树232# i4 N5 ~) u- v0 |- S0 x+ p6 M
7.10.4 “睡眠设备”模块的代码描述2336 v% o. k D* Z+ V; J
7.11 代码清单7-2:int_imx_key_wait.c236
7 q6 C+ y2 x% ]: M' Z4 k( A& G3 G7.12 int_imx_key_wait.ko演示239
9 f! V/ S2 q8 H. X, a5 w# k7.13 内核线程2399 e5 m( W5 V! |) v8 M' b8 i
7.14 实验7-3:“keyled类”模块240
1 g3 n d" B/ M1 a4 \7.14.1 i.MX7D处理器的硬件描述240
& u+ C3 ]3 {) t N9 N7.14.2 SAMA5D2处理器的硬件描述241+ I) Z4 d/ T- C: n
7.14.3 BCM2837处理器的硬件描述241
& O( e$ [4 J# x7.14.4 i.MX7D 处理器的设备树242$ c7 }1 W7 o; j# v
7.14.5 SAMA5D2处理器的设备树245
) B( K, O O6 w# A6 a7.14.6 BCM2837处理器的设备树247# \% O2 x' I; j' P6 T
7.14.7 “keyled类”模块的代码描述2490 B2 N1 C& p% n$ [. T
7.15 代码清单7-3:keyled_imx_class.c255
* z) K' P t1 p7 B7.16 keyled_imx_class.ko演示2642 `4 W$ q# c6 S# p4 z
第8章 在Linux驱动中分配内存266
; \! @# f" Z! o8.1 查询ARM的MMU转换表267
( @ w9 M& f$ e' C8.2 Linux地址的类型271
* J7 H3 P$ P2 O0 J4 j" p8.3 用户进程的虚拟地址到物理地址的映射273% `. N+ X% f9 k' O, }: P7 R4 _4 D
8.4 内核的虚拟地址到物理地址的映射273
" B- l8 Y6 n9 J3 z) q D8.5 内核内存分配器2755 H5 Z' g. [5 i
8.5.1 页面分配器275
- q8 x2 l5 |" E6 h' Z- P8 v8.5.2 页面分配器接口2754 R4 u' \6 X1 `4 Q
8.5.3 SLAB分配器276
2 J7 R. h3 b5 H6 b1 \- E# q8.5.4 SLAB分配器接口278- a: r, R( Q8 J5 @9 p
8.5.5 kmalloc内存分配器279( @6 L% W8 L' I C }
8.6 实验8-1:“链表内存分配”模块280/ x5 d9 b+ d+ c
8.7 代码清单8-1:linkedlist_imx_platform.c283
9 T% f# B# h" ^8.8 linkedlist_imx_platform.ko演示287
8 F6 u& h5 I0 C: K2 ?第9章 在Linux设备驱动中使用DMA288. T' m* S$ D; s) V: ]/ q
9.1 缓存一致性288# D) q* U' _) Z1 p
9.2 Linux DMA引擎API289
; H& {/ a9 D, u% }$ U: N7 n1 y) `9.3 实验9-1:“流式DMA”模块295
1 A& k7 `6 W0 v9.4 代码清单9-1:sdma_imx_m2m.c302, Y- e& c9 V7 E% l, T
9.5 sdma_imx_m2m.ko演示 306
6 ^6 u* t, B7 }+ s1 w% {( F$ E: I9.6 DMA分散/聚集映射306# \2 l, q) Q: g% V- C; a4 ?
9.7 实验9-2:“分散/聚集DMA设备”模块 307
) B1 \; \9 i1 f8 R$ R0 g9.8 代码清单9-2:sdma_imx_sg_m2m.c310
/ W/ B' P9 C2 s: y9 C9.9 sdma_imx_sg_m2m.ko演示 315
3 w! [- h2 \7 z: b1 k) @) o. C9.10 用户态DMA315
$ P8 d0 @( X& H( B* D& j4 V9.11 实验9-3:“用户态DMA”模块3178 Q$ W8 _+ U8 a U
9.12 代码清单9-3:sdma_imx_mmap.c319
5 A3 \$ q2 V/ k, w. q1 j5 \9.13 代码清单9-4:sdma.c323
2 B/ m4 f3 H5 \/ Q8 \/ b6 \6 Z( c' u9.14 sdma_imx_mmap.ko演示324
% {" F# z" ?) ?3 u第10章 输入子系统设备驱动框架325$ Y( k0 i3 Q x/ P: s
10.1 输入子系统驱动程序326/ Z" c6 l/ o0 r/ _ Q$ I
10.2 实验10-1:“输入子系统加速度计”模块327
" {7 L! U( r e: ?0 J/ S10.2.1 设备树329
2 { O5 O6 J: h: I+ k10.2.2 使用I2C交互的输入框架3305 T+ a' m: I+ w+ p: n c6 y
10.2.3 使用输入设备的输入框架3311 I, g/ K5 P3 W6 {' i& [6 e8 Q
10.3 代码清单10-1:i2c_imx_accel.c334
N. s7 m& m' J T4 ]7 \% a- J& l10.4 i2c_imx_accel.ko演示336
7 p0 ]! j" |5 p, I8 h10.5 在Linux中使用SPI337
* b* H; f& m$ Q( w* P9 ~5 Z, w1 V10.6 Linux的SPI子系统339java8.com4 b: ^5 P/ R4 n$ P6 p9 b
10.7 编写SPI从设备驱动程序 342
5 X) S% ~( V3 {2 [* O5 N10.7.1 注册SPI从设备驱动程序 342
1 {; k; w! @5 E3 E+ z8 C" q10.7.2 在设备树中声明SPI设备343* r- [- u3 |( r( J% Z
10.8 实验10-2:“SPI加速度计输入设备”模块3463 k* s( I6 r6 z* ^5 ^& N
10.8.1 i.MX7D 处理器的硬件描述347
, ^6 l6 v7 l, w& c10.8.2 SAMA5D2处理器的硬件描述 347
# d$ L; C2 D/ V/ @$ X10.8.3 BCM2837处理器的硬件描述 348: y2 J& i9 H; M6 x0 z
10.8.4 i.MX7D处理器的设备树348
9 J5 `$ M' {$ Y1 D; g+ h10.8.5 SAMA5D2处理器的设备树 349
- m9 U3 f- o6 R* I10.8.6 BCM2837处理器的设: @& f2 ] j# J3 X1 Z
百度云盘下载地址(完全免费-绝无套路):2 O9 }" B8 b- w) i1 K; L. G V: E
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|