|
Java电子书:嵌入式Linux设备驱动程序开发指南(原书第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
6 |% Z: l8 }3 i4 y
* J7 H8 j) W. h; Q( b- L2 H" j% Z: p6 f! h
编号:mudaima-P0320【Java吧 java8.com】9 @5 s0 _ s6 B
% h1 m, t2 V, y. p4 H
' h, D4 B- X( f2 f' J' x6 {2 [7 t9 H3 M* [8 {: ?, `
Java电子书目录:第1章 构建系统1
; }# u4 J0 c9 Q1.1 引导加载程序1
, |2 D7 L2 y8 o$ @; B4 \1.2 Linux内核34 H x L* a- O; _+ C6 h3 Z5 n4 d. I
1.3 系统调用接口和C运行时库6
" S w! `8 n, U+ g2 |1 J1.4 系统共享库7+ N- R* u7 z! y4 R9 `
1.5 根文件系统8
& s# C4 e$ [ }/ m1.6 Linux启动过程9
0 d- {" Z5 J0 O) c6 T1.7 构建嵌入式Linux系统10
8 k9 [' ~: A. a1.8 设置以太网通信115 Y) c2 {3 d( W: t/ O% U
1.9 为NXP i.MX7D处理器构建嵌入式Linux系统11
( ]+ Q5 _6 T: Y n. r1.9.1 简介12& P2 Z4 ^ D) f: U
1.9.2 主机软件包122 o. h: `, ~! k/ H/ y1 ~' A( `$ w
1.9.3 设置repo工具13$ r# G' W# u1 n: f; A+ k
1.9.4 Yocto工程的安装和映像构建13
+ f% k7 z; ~" e1.9.5 Yocto 之外的工作15' i: k- j# o% D; T3 x+ Y" y8 S& g
1.9.6 构建Linux内核18
2 [4 ~! F7 h! q. u" Q1.9.7 安装TFTP服务器20
3 h* V4 a$ l& V1.9.8 安装NFS服务器20
, x) e1 Y/ U! k1 _/ ?' N/ o% |1.9.9 设置U-Boot环境变量21
: D3 b7 M8 Y/ H$ ]! ~' E9 P* Y1.10 为Microchip SAMA5D2处理器构建嵌入式Linux系统21& ]5 g7 d7 C' e: I
1.10.1 简介22
5 H1 |; a7 M7 T" y1.10.2 主机软件包22: v, }* J* k% w
1.10.3 Yocto工程的安装和映像构建22
1 _5 o* W) ?# f& O; R/ d# P3 V1.10.4 Yocto 之外的工作253 O; j; s$ X) K
1.10.5 构建Linux内核25
7 }: x- _, [- }2 D m8 U/ i1.10.6 安装TFTP服务器27! c$ P0 `% z; ]' J6 y% z
1.10.7 安装NFS服务器27, B$ A" c( |" C& q
1.10.8 设置U-Boot环境变量28% W0 q5 A& F: K3 L( w
1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统28* @9 W% v% B5 p& `/ d% `
1.11.1 Raspbian28
$ e: Q! {0 H# H: c, |1.11.2 构建Linux内核29
$ f6 O. A& @: W/ U7 }1.11.3 将文件复制到Raspberry Pi31
7 c0 n! p0 a5 _) [- U/ X& F4 S. i) Y1.12 使用Eclipse33
z& H2 s; J' j( p: q4 m/ \. K1.12.1 用于内核源码的Eclipse配置33; K2 i E9 z& T' q }7 O& ~
1.12.2 用于开发Linux驱动程序的Eclipse配置38- u- }2 `3 `, u) t! r" F* y
第2章 Linux设备与驱动模型42
7 H j5 l- n* Y5 |! Q+ z& L2.1 总线核心驱动42
4 U+ H; e: K# c1 W" }2.2 总线控制器驱动45
4 \- Y u" m2 N C* E& K9 r2.3 设备驱动45
, U" Q0 I& G& ^6 g2.4 设备树简介46
6 O* D* k( x3 o9 f. u0 H第3章 简驱动程序506 G) q( u. H P& c4 S9 v6 p& s
3.1 许可证51
. h* p: {1 d" Y Z% t. \4 ]7 O3.2 实验3-1:“helloworld”模块51& m( ~$ A! U$ E% J3 t! s
3.3 代码清单3-1:helloworld_imx.c522 A! k6 n; I- p
3.4 代码清单3-2:Makefile52
9 o' F! L% ?) F6 V% f: A, ]/ m6 [; B3.5 helloworld_imx.ko演示532 h* d5 s4 C4 c6 Q
3.6 实验3-2:“带参数的helloworld”模块53
4 |& O3 B m- Q3.7 代码清单3-3:helloworld_imx_with_parameters.c54- L, q0 q8 y+ y, p' _
3.8 helloworld_imx_with_parameters.ko演示54& t/ H4 }2 t8 l) E. s
3.9 实验3-3:“helloworld计时”模块55
2 ]4 h E* }) P5 Z+ S3.10 代码清单3-4:helloworld_imx_with_timing.c55" N1 X& p1 ]. |* A% Y7 X2 a
3.11 helloworld_imx_with_timing.ko演示563 R! W$ ^8 R( h* U
第4章 字符设备驱动57/ f: {1 ]0 P8 A7 ?
4.1 实验4-1:“helloworld字符设备”模块594 k; v: `5 R+ v: ]. l
4.2 代码清单4-1:helloworld_imx_char_driver.c635 ~7 I+ ?3 T8 r. A
4.3 代码清单4-2:Makefile65
- v5 }3 h* H1 \4 L4.4 代码清单 4-3:ioctl_test.c655 V% d4 g' N" ~: _% i% y
4.5 helloworld_imx_char_driver.ko演示66
" o% r7 e1 T; O4.6 将模块添加到内核构建66- O2 K7 y. y3 U/ h7 X# v% q
4.7 使用设备文件系统创建设备文件67
* w: `& J' D0 f8 B. p* \3 J4.8 实验4-2:“class字符设备”模块687 x# j" H) D0 S# [; w
4.9 代码清单4-4:helloworld_imx_class_driver.c70; ^7 n1 A" P, I, C
4.10 helloworld_imx_class_driver.ko演示72
: W6 `6 Y- z+ j4 u: X* G& ?4.11 杂项字符设备驱动72, m' m( V# e& P' c; b4 Q
4.12 实验4-3:“杂项字符设备”模块73
: P: @* E3 @; g' ` a1 S4.13 代码清单4-5:misc_imx_driver.c745 s- T0 I4 k% o# `+ ^! K, n, V3 _3 d1 s
4.14 misc_imx_driver.ko演示75
: @+ g9 W0 V) M第5章 平台设备驱动76
3 k( b) R" H' `# h/ j) B3 u7 }5.1 实验5-1:“平台设备”模块78
) `5 ~7 a5 t/ n5.2 代码清单5-1:hellokeys_imx.c81 F/ ] ]% ^% N; @
5.3 hellokeys_imx.ko演示82) W) @9 Z$ o P+ a
5.4 操作硬件的文档824 v1 Z1 Z+ @8 N# z; \
5.5 硬件命名约定83 L/ |# K$ Z# A8 j& f
5.6 引脚控制器84
" ~# A- D" t& y9 ?; l" L R5.7 引脚控制子系统86# W2 Q$ X% Y: w, w# S$ e; H% b
5.8 设备树引脚控制器绑定92, T( h) @7 a4 I( [
5.9 GPIO 控制器驱动96
" C9 b: \# M9 K2 L/ N5.10 GPIO描述符使用者接口98
& [" a0 R- t: S+ R2 i7 `5.10.1 获取和释放GPIO98
6 N/ M& Z0 R3 K3 |! K- v7 I4 _5.10.2 使用GPIO99
4 V9 O: s# r* ^3 U9 E9 q" p5.10.3 GPIO映射到中断99
+ b1 {5 n: K# E" s5.10.4 GPIO设备树1004 Q! ]2 m4 J3 f
5.11 在内核和用户态之间交换数据100
2 V- G1 k7 e3 Q/ x' S' Q* R8 b5.12 MMIO(内存映射I/O)设备访问101
- t' r% L5 [ p9 s9 Z8 O5.13 实验5-2:“RGB LED平台设备”模块103
: | H8 j" i& S) W3 X4 X5.13.1 i.MX7D处理器的硬件描述103
8 M8 {' {, j9 J' S& G6 Z/ D/ ]5.13.2 SAMA5D2处理器的硬件描述105' B. W! G2 S/ }# P" G: ]( `* B+ L3 w
5.13.3 BCM2837处理器的硬件描述1074 A9 p6 J; j0 O5 s5 G+ O
5.13.4 i.MX7D处理器的设备树1072 j1 R- l. Z X& @5 E
5.13.5 SAMA5D2处理器的设备树111
/ ~( Y7 M5 k5 F) k) f# P" y5.13.6 BCM2837处理器的设备树1149 i" B0 t1 h" _# h9 w p* o4 ?# |* L
5.13.7 “RGB LED平台设备”模块的代码描述115
3 p: P" S8 a- p: N5.14 代码清单5-2:ledRGB_sam_platform.c1199 e7 Q) B- m! M A( `
5.15 ledRGB_sam_platform.ko演示124
5 Q& X6 [) m+ y& _5.16 平台驱动资源124: [7 j) n5 { y# s( }. b7 c8 @
5.17 Linux LED类126; z; K; U, i0 P+ r
5.18 实验5-3:“RGB LED类”模块128
1 J w% j- v* y& d) P0 P7 F& t; C5.18.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树128# x. c7 \( F* w1 l# ~/ m
5.18.2 “RGB LED类”模块的代码描述1300 X, S2 g- ^7 q+ v# s6 y2 x8 J
5.19 代码清单5.3:ledRGB_sam_class_platform.c134
9 d, i5 P* E0 M2 ?5 Q# k& e8 z5 f5.20 ledRGB_sam_class_platform.ko演示137) M+ @+ @% ?2 S, w9 |' C
5.21 用户态中的平台设备驱动137
, h: p/ U1 g* R3 S$ V+ [9 z0 p1 }3 N5.22 用户定义的I/O:UIO1398 L. k7 }# V, B- W
5.22.1 UIO如何运转140- r' y/ |9 b) S
5.22.2 内核中的UIO API141+ I1 k! w5 {4 P+ p7 X5 E6 K
5.23 实验5-4:“LED UIO平台”模块142
3 l7 e7 K) G3 |, {; A) W5.23.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树143! t. D$ ~" o6 I( ?
5.23.2 “LED UIO平台”模块的代码描述144! |2 N8 {5 Z& l. t
5.24 代码清单5-4:led_sam_UIO_platform.c1468 ?2 S2 U {! w- H" q
5.25 代码清单5-5:UIO_app.c148
7 Y; r2 I# T& T, l& J5.26 led_sam_UIO_platform.ko及UIO_app演示1500 q4 V+ ?) @5 a
第6章 I2C从端驱动1515 ?. @* r7 U: h4 X5 M
6.1 Linux I2C 子系统152/ I6 a) h% u+ W
6.2 编写I2C 从端驱动1558 \0 N5 D" a9 L8 V
6.2.1 注册I2C从端驱动155
6 M+ ` n, X: N& H6.2.2 在设备树中声明I2C设备157
; Q) p; W p. v; p- v: ? {4 L+ R6.3 实验6-1:“I2C I/O 扩展设备”模块159 ]! R8 R) W, j( p- }4 G6 w
6.3.1 i.MX7D处理器的硬件描述1593 P* W# C) c' C% {- q# a
6.3.2 SAMA5D2 处理器的硬件描述159" x" ~" n; W2 `. V& ?2 g* i: `! u. u" H
6.3.3 BCM2837处理器的硬件描述160
H' h! Q5 _* M8 u6.3.4 i.MX7D处理器的设备树1619 }" I: ~$ w1 F; Z$ q d
6.3.5 SAMA5D2处理器的设备树162
+ C7 ~, r }5 y! b2 c' A& _1 P6.3.6 BCM2837处理器的设备树1634 D2 \6 r" w- [; {5 u! {
6.3.7 “I2C I/O扩展设备”模块的代码描述164
+ r: q7 a! M! F9 c4 l. c6.4 代码清单6-1:io_imx_expander.c1674 M$ C' O' Y) J* b: `+ C, f% e; Y6 ]
6.5 io_imx_expander.ko演示170
' _+ w4 e" r# q/ K# B5 J& D( `6.6 sysfs文件系统171* z% i" {0 e* Y3 N7 n$ c8 S' x* W
6.7 实验6-2:“I2C多显LED”模块174
: @# D7 G; D: F+ K' h6.7.1 i.MX7D处理器的硬件描述1753 R* a) ]9 |$ N( h+ c
6.7.2 SAMA5D2处理器的硬件描述176
" L. z: Y5 m( k# q1 D6.7.3 BCM2837处理器的硬件描述176. O3 R- _$ H# c4 ~9 g
6.7.4 i.MX7D处理器的设备树177
* [7 b9 V: N" _& u- @/ O/ \8 H) ?* S6.7.5 SAMA5D2处理器的设备树1786 s; s9 Y- b' A2 W- C+ Q
6.7.6 BCM2837处理器的设备树1803 f4 S9 C% o. A/ f8 ]% V
6.7.7 ACPI和设备树的统一设备属性接口181% L4 c& r0 |! L4 m8 y1 p7 }
6.7.8 “I2C多显LED”模块的代码描述182' {; \, K" I) o1 t6 e; L
6.8 代码清单6-2:ltc3206_imx_led_class.c186% g/ ?; a- P& g2 I4 `1 L, F5 U( ]$ d& l
6.9 ltc3206_imx_led_class.ko演示192! x" y& a. V$ y2 ]+ T! a$ ~, r3 O
第7章 处理设备驱动中的中断194: l- d" f! W1 y& |
7.1 GPIO控制器在Linux内核的中断域1966 C$ U8 a8 B/ x, U1 l# _, B2 I
7.2 设备树中断处理203 i( x6 J* G2 i& ?
7.3 在Linux设备驱动中申请中断206
. Y4 N- I( k6 _ A7.4 实验7-1:“按钮中断设备”模块207
. }# Y* n# A" l. d- o$ T5 k7.4.1 i.MX7D处理器的硬件描述2083 B8 V& y* S4 V$ l; D4 C; `! H2 `
7.4.2 SAMA5D2处理器的硬件描述208
6 `( M$ ?3 Q" Y; a# x- p7.4.3 BCM2837处理器的硬件描述208( U9 a8 r8 d7 D2 V$ B: v
7.4.4 i.MX7D 处理器的设备树208
" j6 Q% o8 p5 Z- M( R) D7.4.5 SAMA5D2 处理器的设备树209
- w2 g! w* ` V7.4.6 BCM2837 处理器的设备树2105 Y! b; U* K( q6 V
7.4.7 “按钮中断设备”模块的代码描述211" x4 I5 r; R% m( O* l3 k9 Z$ O
7.5 代码清单7-1:int_imx_key.c213# [4 q" G F) ~5 B; N6 X
7.6 int_imx_key.ko演示215# h! C# W; x+ V: l2 P* L# `
7.7 延迟工作215
8 \" u1 q9 R) J! _7.7.1 软中断216
K- h! ~- c9 x' U% e7.7.2 tasklet217; u6 S" U" F6 C+ `& i+ Y: `+ G
7.7.3 定时器218
0 U- b3 x, i, |) M7.7.4 线程化的中断2216 B% a+ @& p. K% G) X
7.7.5 工作队列223- O2 D% F% a/ v* P
7.8 内核中的锁2269 w- {4 W" g( x* I/ J& l
7.8.1 锁和单处理器内核227
- |# l0 `' X. Q' i1 b5 ]( S7.8.2 在中断和进程上下文之间共享自旋锁227* V$ K7 c5 p# e
7.8.3 在用户上下文使用锁227
/ a8 U5 t4 ^. u" D7.9 内核中的睡眠228: H1 Y i/ U* G' ^" c9 }2 A' C
7.10 实验7-2:“睡眠设备”模块2291 R: I! C- L* S M* {
7.10.1 i.MX7D处理器的设备树230
% `6 s. D. i; A; X7.10.2 SAMA5D2处理器的设备树231) c% z! Z6 e/ g$ y+ W
7.10.3 BCM2837处理器的设备树2326 d) ], p; t9 o2 A6 o8 J g8 x
7.10.4 “睡眠设备”模块的代码描述233
8 z! ^" S* S8 Y Y5 s1 V7.11 代码清单7-2:int_imx_key_wait.c236! J* T9 _8 X8 |( I
7.12 int_imx_key_wait.ko演示239
: W/ t7 L1 `4 }0 `7 @( [7.13 内核线程2392 z. q' X9 v# {; F1 t2 d
7.14 实验7-3:“keyled类”模块240
5 ^8 V4 ?% w! y- F" Z7.14.1 i.MX7D处理器的硬件描述240/ @0 c- q# r% Q8 C
7.14.2 SAMA5D2处理器的硬件描述241, v3 j0 T' O: p* m
7.14.3 BCM2837处理器的硬件描述241
, U. M7 ], U$ g* c. D" O7.14.4 i.MX7D 处理器的设备树2427 M. Q U/ ]* J. d3 V5 m% R# t# I
7.14.5 SAMA5D2处理器的设备树245
n( G0 r8 C: h3 l, G7.14.6 BCM2837处理器的设备树247! a% e( k$ g$ ~* y2 @5 Q1 u
7.14.7 “keyled类”模块的代码描述249
( X/ \1 J5 I0 e' o: {) l W7.15 代码清单7-3:keyled_imx_class.c255* }; E, Y7 Z0 ~ d
7.16 keyled_imx_class.ko演示264
$ I' P E! U8 u D第8章 在Linux驱动中分配内存266* @" c' L0 m# m8 `5 E, e J
8.1 查询ARM的MMU转换表2672 @ ^ _% Q8 J1 Q( R* o" Z
8.2 Linux地址的类型2716 S& T* y6 v. M) g$ x1 w# w
8.3 用户进程的虚拟地址到物理地址的映射273
1 `' d; |( h( R% r9 C* \$ G" F3 M8.4 内核的虚拟地址到物理地址的映射273& U% x; q1 M" L- o4 ^9 D$ A) v1 N# `* E: Z
8.5 内核内存分配器275
- T8 s( u3 i+ p* W8 l/ e8.5.1 页面分配器275# B/ N+ H* K1 v8 F1 _2 Y9 Y: i/ L' k2 r
8.5.2 页面分配器接口275; _- j6 t. y1 y( ^# S5 f6 K% l
8.5.3 SLAB分配器2766 [7 P! I9 D8 \. g2 R9 E( @( h$ s/ ]
8.5.4 SLAB分配器接口278
# P3 v+ p: a/ @* _# Q; h( c8.5.5 kmalloc内存分配器279
2 f+ ?7 c) [; ~% q; q" k ?8.6 实验8-1:“链表内存分配”模块280
0 ?% ^$ D8 x q2 u8 `7 h( o8.7 代码清单8-1:linkedlist_imx_platform.c283
% ?$ @" D. y6 }) D8.8 linkedlist_imx_platform.ko演示287; X) H9 X) m8 u3 z0 |6 d
第9章 在Linux设备驱动中使用DMA288
# i$ U( k, V5 I9 G2 m* V# M9.1 缓存一致性288. m H( h' i3 ?! `, I2 D
9.2 Linux DMA引擎API289/ V( h; r6 p0 D6 p5 ]- t' b
9.3 实验9-1:“流式DMA”模块2952 H2 o. E) p; [
9.4 代码清单9-1:sdma_imx_m2m.c302
6 H, t- w6 R5 N9.5 sdma_imx_m2m.ko演示 3061 a0 g/ c. E0 ~( I' |( `/ X. B$ u
9.6 DMA分散/聚集映射306) g2 ?1 B! B2 N; q
9.7 实验9-2:“分散/聚集DMA设备”模块 307. _+ f. K$ x$ d w1 s
9.8 代码清单9-2:sdma_imx_sg_m2m.c310
3 u7 h7 l+ _2 c3 Y( z- |9.9 sdma_imx_sg_m2m.ko演示 315/ {2 z$ i0 y. \3 A" C
9.10 用户态DMA315
0 d' I+ j% q4 Q! L% g' F# p, c9.11 实验9-3:“用户态DMA”模块3178 g! T& y+ m. r( M5 f/ j
9.12 代码清单9-3:sdma_imx_mmap.c319
, ?# N0 D. g8 K( z: @6 v9.13 代码清单9-4:sdma.c3235 ]+ ]4 i" y( x& v1 V) }$ O2 A
9.14 sdma_imx_mmap.ko演示324' U$ ?1 f. ?. P1 o4 O' }
第10章 输入子系统设备驱动框架325
0 B6 s3 {/ c! u7 u+ }! F( L10.1 输入子系统驱动程序326
# t! v" @+ c) B% ^1 j0 f( C( A10.2 实验10-1:“输入子系统加速度计”模块3271 O, Q- X7 Z5 J
10.2.1 设备树3291 D: z' T' i4 N4 H( @- y
10.2.2 使用I2C交互的输入框架330! G( G7 h- |: X/ S8 k
10.2.3 使用输入设备的输入框架331
7 H4 S- v: T/ h9 ^# _1 u10.3 代码清单10-1:i2c_imx_accel.c334
; l$ Z" [3 [" Z' p1 G( z* ?10.4 i2c_imx_accel.ko演示336
) V' v' B. N2 Y P& |. `5 D10.5 在Linux中使用SPI337
4 u! ~" S( _3 k9 ^' D6 C0 B; q* A10.6 Linux的SPI子系统339java8.com' O+ [* |5 I ?3 W
10.7 编写SPI从设备驱动程序 342
$ t2 Z4 M/ }4 W/ u! u; G+ P10.7.1 注册SPI从设备驱动程序 342
2 v, h/ V( u( x9 N10.7.2 在设备树中声明SPI设备343
. Z9 s' o+ c- P2 L& Z10.8 实验10-2:“SPI加速度计输入设备”模块346
' F8 h4 V3 M) o* q/ w3 {# h4 G10.8.1 i.MX7D 处理器的硬件描述347
- _# W2 l7 m7 S10.8.2 SAMA5D2处理器的硬件描述 3479 I% t+ ?# U5 X3 j" g! E
10.8.3 BCM2837处理器的硬件描述 348
( d4 u( Y, A6 f& h7 T10.8.4 i.MX7D处理器的设备树348# ~3 G C9 @1 s/ _! C1 K
10.8.5 SAMA5D2处理器的设备树 349. j+ \ B. K8 O; f( i0 G- v+ B) e: y$ Y
10.8.6 BCM2837处理器的设
$ d0 o1 v; X, s3 p" l百度云盘下载地址(完全免费-绝无套路):
) T, s. k2 W0 ^. A* R |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|