|
Java电子书:嵌入式Linux设备驱动程序开发指南(原书第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com4 L5 G& X. c$ X4 N: p5 h
: M) K# d3 P7 B
# y) [* B: {! f8 I编号:mudaima-P0320【Java吧 java8.com】3 T4 }# q5 B& H
: I6 ]' O3 w( O# q4 f
% N0 G( T0 E+ F$ Y% T3 ]! R6 P. R( A& T4 X; X
Java电子书目录:第1章 构建系统1; ?% m+ b2 F- |4 C) Q' e
1.1 引导加载程序1
; j2 v6 u) I' ~, n$ ^" B, X; u1.2 Linux内核3. O- z+ T7 P8 _, L3 n
1.3 系统调用接口和C运行时库6
, g! o8 X$ t% o) n) J. W' F' N1.4 系统共享库7, }( _* o F( {2 y# L) h3 x
1.5 根文件系统89 O; U8 }1 Y% \$ r- \, B
1.6 Linux启动过程9
. u- [2 B% j2 P% o1.7 构建嵌入式Linux系统10
/ A# D' _2 g9 t& }1.8 设置以太网通信11& ~# Y% r; E# @# N
1.9 为NXP i.MX7D处理器构建嵌入式Linux系统114 h( \5 L9 `: {/ d3 z4 K5 ?# G7 R
1.9.1 简介12
7 y) G0 Y+ r; c2 l( I' q1.9.2 主机软件包12# w; `! M# I0 K
1.9.3 设置repo工具13
1 Z) ^) o7 [# I1 f: h1.9.4 Yocto工程的安装和映像构建13
. ]$ `5 }" T# f7 r7 s h; R9 E1.9.5 Yocto 之外的工作15
& E( \0 b1 Y7 P. r" [1.9.6 构建Linux内核18& X& G' @$ s4 b! B8 Q
1.9.7 安装TFTP服务器20, F& K; z) n1 J, M
1.9.8 安装NFS服务器20; \7 W& h" y! | S, n5 g$ c7 {
1.9.9 设置U-Boot环境变量21% O' z& e0 Y( J& Z
1.10 为Microchip SAMA5D2处理器构建嵌入式Linux系统21$ |" `6 K, S: R. Y$ |* `2 a& ~
1.10.1 简介22
" N( {) o% p- z6 T+ f" m" y7 F1.10.2 主机软件包22
; w6 @) x$ D0 ?- J% V& V. D1.10.3 Yocto工程的安装和映像构建22
8 {# ` T# Y6 [9 P) Y1.10.4 Yocto 之外的工作259 ?5 x9 Z$ W _* f$ M% a
1.10.5 构建Linux内核25& d5 M- ?8 s& x
1.10.6 安装TFTP服务器27
5 A6 p1 |( @' L8 F Q6 j& f: _4 g1.10.7 安装NFS服务器27
* z: y6 V, \% u& X# T( z; p1.10.8 设置U-Boot环境变量282 i4 C& w# F% ~2 z& }9 ~! c
1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统28
* H9 w7 P# s. i1.11.1 Raspbian28/ `7 ^5 m: C: ^ b3 f* w1 P
1.11.2 构建Linux内核29
2 ~ ?9 c) o/ H. ^- u. h2 N# n1.11.3 将文件复制到Raspberry Pi319 t: L v7 N" Q8 Q. a9 I' |0 \
1.12 使用Eclipse33# W ~/ g% J/ D3 V! v% x
1.12.1 用于内核源码的Eclipse配置33& o. v4 P" U5 y5 d$ p$ \
1.12.2 用于开发Linux驱动程序的Eclipse配置38
" k; Y" s3 q! [! V( C( e6 e- F9 y第2章 Linux设备与驱动模型42
- V" \- J$ {% l: ~6 S3 h4 a5 Q" i/ x2.1 总线核心驱动42
$ m$ Y. s4 G8 a4 O u1 P2.2 总线控制器驱动45- ~0 s7 A m/ `
2.3 设备驱动45
6 F+ H: a7 s+ D2 k2.4 设备树简介46
% a5 z/ E# M7 R6 Z1 g5 m; M6 |$ }) Y第3章 简驱动程序508 B& F% y, ?$ V0 X) h$ q
3.1 许可证51
b |1 }8 |5 f7 S+ x3.2 实验3-1:“helloworld”模块51 z0 v" O1 _* ^( _
3.3 代码清单3-1:helloworld_imx.c52
! @! g4 d9 |* M# N S( z( c3.4 代码清单3-2:Makefile52
% A+ ?2 x# V# J. p3.5 helloworld_imx.ko演示538 V/ B6 B# t- F
3.6 实验3-2:“带参数的helloworld”模块53
# F4 ~0 b' x$ `0 x1 v$ _3.7 代码清单3-3:helloworld_imx_with_parameters.c54 |) ^0 `, d( v" M4 z3 Y$ M$ ~# t) V
3.8 helloworld_imx_with_parameters.ko演示54- Y+ m4 F6 H* ^( Z3 v0 f7 H8 c
3.9 实验3-3:“helloworld计时”模块55. E3 f' m- n+ z; S8 C H$ F
3.10 代码清单3-4:helloworld_imx_with_timing.c55
5 {. W, I( M. f# k! r( w5 \) i& S3.11 helloworld_imx_with_timing.ko演示56
6 l/ q0 @& T. Q( l3 |* w第4章 字符设备驱动578 R4 [* R8 `- Q% e4 }0 n
4.1 实验4-1:“helloworld字符设备”模块59
2 a9 H& [% D* I; m4.2 代码清单4-1:helloworld_imx_char_driver.c630 T9 W6 v2 d$ W2 X5 x8 I
4.3 代码清单4-2:Makefile65
1 ~$ Q+ }* T& Z4.4 代码清单 4-3:ioctl_test.c65
% l7 D. K: i w- d: d L0 L) h C4.5 helloworld_imx_char_driver.ko演示66
1 C# j2 \, [! u# o. t4.6 将模块添加到内核构建66
& Z& W0 t7 ?# R8 ` Z% N4.7 使用设备文件系统创建设备文件676 U* y6 W8 S# G U7 t9 M8 Z/ Y5 U
4.8 实验4-2:“class字符设备”模块68 ]% p$ H0 R% l( L/ Z4 t+ D2 d
4.9 代码清单4-4:helloworld_imx_class_driver.c70
3 ^# R& o* a/ }2 D2 _) K. k4.10 helloworld_imx_class_driver.ko演示72 y% X: R7 z, x2 V4 I: ~& c
4.11 杂项字符设备驱动72
; f: J7 C: q. @% U. W" R& \4.12 实验4-3:“杂项字符设备”模块73
. S- _$ N$ [7 w5 ]4.13 代码清单4-5:misc_imx_driver.c744 e/ s) Z. l% O7 b: D2 U- |& G
4.14 misc_imx_driver.ko演示75
d1 }+ V% n; t3 G7 c5 V8 N第5章 平台设备驱动76
2 _6 K6 N+ P ]1 P! R# d( Y" X- d5.1 实验5-1:“平台设备”模块78
`$ I! Z1 [$ a/ ]$ } u& n5.2 代码清单5-1:hellokeys_imx.c81
) h6 m$ l9 C i- J8 c5 ^9 O5.3 hellokeys_imx.ko演示82' i8 m7 W/ z3 S O u( h$ g }
5.4 操作硬件的文档82. J0 H7 t6 `% n) [5 W9 N+ K
5.5 硬件命名约定836 m6 R) X4 B- Q5 @
5.6 引脚控制器84
1 I8 R- X$ a9 d9 ]4 N* [5.7 引脚控制子系统86! I9 Y5 p5 L9 f1 _3 y
5.8 设备树引脚控制器绑定92
9 P8 {( y$ h' }7 d7 @% M: n5.9 GPIO 控制器驱动96
1 J4 e1 f$ y2 H* W5.10 GPIO描述符使用者接口98
' \1 n0 D: M/ L8 r. u% S0 J5.10.1 获取和释放GPIO98
- G5 q# t- P$ Z3 V6 X5.10.2 使用GPIO99
! K- y9 ?9 Z$ M3 C; W& a0 c1 w5.10.3 GPIO映射到中断99
5 ^& c7 B# m/ E3 j% x5.10.4 GPIO设备树100
8 |: x3 d& Q# r& d C* T# {5.11 在内核和用户态之间交换数据100
" k/ b; l3 E1 ~/ E5.12 MMIO(内存映射I/O)设备访问101
# G5 h# E9 B0 d7 t4 g) G) S5.13 实验5-2:“RGB LED平台设备”模块103
6 b. L% v, b% T% ~8 }7 y5.13.1 i.MX7D处理器的硬件描述103
3 z; o1 j) ?; V* c5.13.2 SAMA5D2处理器的硬件描述105: [, ]* W6 W5 G" u6 A
5.13.3 BCM2837处理器的硬件描述107
0 C5 y) {6 ]: u8 i" A3 J0 t7 R7 _5 r5.13.4 i.MX7D处理器的设备树107
1 z7 G, J0 i: S& Z8 p5.13.5 SAMA5D2处理器的设备树111
5 L2 d) z6 G. x8 @9 O1 u s5 |2 }5.13.6 BCM2837处理器的设备树114
$ ]% q$ q r+ q0 w" G8 U5 y- r; p( _5.13.7 “RGB LED平台设备”模块的代码描述115; n4 H1 J' z4 K, P
5.14 代码清单5-2:ledRGB_sam_platform.c119& W5 A8 j4 {2 T0 F5 f2 L
5.15 ledRGB_sam_platform.ko演示124( D; [% [3 K: a8 l, K' a
5.16 平台驱动资源124
) B3 x! d! @+ l, b* R8 _& i5.17 Linux LED类126
& R+ ? G) _- t( D9 d5.18 实验5-3:“RGB LED类”模块128
- Z, ^, K2 s3 }3 v- {' C8 w5.18.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树128
6 Y- j; P- Z' M- E5.18.2 “RGB LED类”模块的代码描述130
& K1 Y+ N9 Y) S. q8 x% X7 H( u5.19 代码清单5.3:ledRGB_sam_class_platform.c1340 M, k6 @' L. G# q$ _7 N7 U2 }
5.20 ledRGB_sam_class_platform.ko演示137- C7 e- j8 F: Y# {) K: d
5.21 用户态中的平台设备驱动1377 _; u$ i+ A$ t/ k+ x0 ] P
5.22 用户定义的I/O:UIO139
6 Q$ A2 O) F: J+ i6 H3 |- \ ]5.22.1 UIO如何运转1409 M: H1 g! C, i( a
5.22.2 内核中的UIO API141$ a! f& L: e! r) i
5.23 实验5-4:“LED UIO平台”模块142
7 l0 M" {8 P- a8 \* N. a' \* ~6 |5.23.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树143
9 F! V& ~+ A0 `' N7 m5.23.2 “LED UIO平台”模块的代码描述144
% k9 T0 d1 P! r2 S, y4 H+ q5.24 代码清单5-4:led_sam_UIO_platform.c146
3 n. x y! d3 u5.25 代码清单5-5:UIO_app.c148) s" h- C( Q; m: ]" A. Y
5.26 led_sam_UIO_platform.ko及UIO_app演示150( l" D8 Y) ]# ]( X
第6章 I2C从端驱动151
% p/ G' i) G3 w8 `3 ?6.1 Linux I2C 子系统1526 C0 _ G* U. d/ t
6.2 编写I2C 从端驱动155
1 Q$ u/ f' Q& Y- q; k$ F& L" j6.2.1 注册I2C从端驱动155
6 a0 H: s# T, s5 x6.2.2 在设备树中声明I2C设备157
% P8 L! T- X4 l! w2 {6.3 实验6-1:“I2C I/O 扩展设备”模块159
! F7 @& E+ K5 A; f% e/ V6.3.1 i.MX7D处理器的硬件描述159
7 G, Q, ]9 P2 \/ W/ C) C4 a3 ^; F6.3.2 SAMA5D2 处理器的硬件描述159
; M+ N8 C; V) l9 |1 B. r6.3.3 BCM2837处理器的硬件描述160
6 T% }: ~ ^) u v* R3 b6.3.4 i.MX7D处理器的设备树161' P4 W* l- d- q7 m+ ]: [7 T2 p7 [. b
6.3.5 SAMA5D2处理器的设备树162/ L% m* x0 I4 ]0 W
6.3.6 BCM2837处理器的设备树163' h3 t4 s5 k: s( U* b9 y# }
6.3.7 “I2C I/O扩展设备”模块的代码描述164
8 D0 J0 t; w2 Q) Q) K- K/ [2 A8 r% ~6.4 代码清单6-1:io_imx_expander.c167
) _) o) q9 M" B+ M9 w& f; I6.5 io_imx_expander.ko演示170
) Q$ S9 ` o* N. w% Z6.6 sysfs文件系统1710 v- k/ Y: R4 K9 a0 L- L- O
6.7 实验6-2:“I2C多显LED”模块174
B: U6 x& O2 f {$ L$ b" T6.7.1 i.MX7D处理器的硬件描述175
, d& t P `) e7 k6 Q6.7.2 SAMA5D2处理器的硬件描述176# u& @- U% a. A2 N* o U0 e, f, F
6.7.3 BCM2837处理器的硬件描述176
9 e K/ r2 H/ v- Y" s- i0 z6.7.4 i.MX7D处理器的设备树177
5 L8 F% w* Q% D3 g. L# R. d6.7.5 SAMA5D2处理器的设备树1780 i( A0 \' v7 a
6.7.6 BCM2837处理器的设备树180
4 [5 r6 s* Z, `* ?5 K* M9 B6.7.7 ACPI和设备树的统一设备属性接口181
2 k0 w; Y0 L) b* O% o6 \! d9 w6.7.8 “I2C多显LED”模块的代码描述182
. w0 R0 c( H+ \& [" J6 k6.8 代码清单6-2:ltc3206_imx_led_class.c186
# } C$ F2 u) m6.9 ltc3206_imx_led_class.ko演示192
7 i2 F& W. {- X- [0 ]4 Z. J第7章 处理设备驱动中的中断1940 X( q; f; N! j' z( C% S
7.1 GPIO控制器在Linux内核的中断域196
8 ~% ^ _* U- g7.2 设备树中断处理2036 e( C0 @- \8 Y* J0 i* {
7.3 在Linux设备驱动中申请中断206
2 V% ]! X4 ~( h" p+ @2 ~. o7.4 实验7-1:“按钮中断设备”模块207! J, r) l8 M7 D+ K
7.4.1 i.MX7D处理器的硬件描述2082 z7 Y( Z! D5 ]% V# h+ G% R' E
7.4.2 SAMA5D2处理器的硬件描述2085 d! O/ q, |0 t7 k! e
7.4.3 BCM2837处理器的硬件描述208
2 K* j9 {5 H, q* _% C1 }! |7.4.4 i.MX7D 处理器的设备树208( f; C, k8 e& i% h, ^( I
7.4.5 SAMA5D2 处理器的设备树209& D1 H7 G7 u# `! Z+ u" B. n
7.4.6 BCM2837 处理器的设备树210
6 v0 r8 S3 e2 ?7 O/ c$ C, M7.4.7 “按钮中断设备”模块的代码描述211
' I- R* S/ M5 F5 r5 u7.5 代码清单7-1:int_imx_key.c213
2 z, g5 n1 c5 H! z% m7.6 int_imx_key.ko演示215
3 h( S3 ^" x3 R9 ^. _ S! B7.7 延迟工作215
6 s4 n2 V/ z* t Y* B1 l7.7.1 软中断216+ I( `* x4 j! ~2 ]$ p8 D
7.7.2 tasklet217: L9 b/ l4 }* m. x% o2 v$ T
7.7.3 定时器218
, m. ?2 f* ~, r7.7.4 线程化的中断221
. y" k& n! B0 t: v4 L3 ~$ e7.7.5 工作队列223
8 E/ L# Y$ j6 t6 A. G5 E& @7.8 内核中的锁226& J1 U z: B; }, G* R, p
7.8.1 锁和单处理器内核227
0 a1 m7 v- ^6 r$ R2 T0 ~% \7.8.2 在中断和进程上下文之间共享自旋锁227
V( a- u4 }. }3 }# R' _. S7.8.3 在用户上下文使用锁2272 j" e7 i) e0 z2 m2 E" u' f8 M
7.9 内核中的睡眠228
5 H" P" T/ F. @% v; N* `$ D7.10 实验7-2:“睡眠设备”模块229
. h6 `8 g- _2 A1 r% ~; S+ B7.10.1 i.MX7D处理器的设备树230
# G# \" G' M0 b7.10.2 SAMA5D2处理器的设备树231
& X9 b3 R' d+ W% Q7.10.3 BCM2837处理器的设备树232& b' e/ o& r: u- ~
7.10.4 “睡眠设备”模块的代码描述233
+ Y, V' K1 k. N* q1 w1 ]# L( _8 F7.11 代码清单7-2:int_imx_key_wait.c236
0 f6 \( Z. m' n" F7.12 int_imx_key_wait.ko演示239
8 t8 R9 l! t5 E3 O4 q2 i7.13 内核线程2398 e/ u# X, S( _4 O6 |$ c2 u
7.14 实验7-3:“keyled类”模块240
4 i1 v4 h3 I: f% `, B! z" V# |3 {7.14.1 i.MX7D处理器的硬件描述240
9 G" c- U& m+ a( O7.14.2 SAMA5D2处理器的硬件描述241* T/ i; f6 X3 ?, ]
7.14.3 BCM2837处理器的硬件描述241
$ n% l. {8 k1 r# L# _! I7.14.4 i.MX7D 处理器的设备树242# S2 C# H8 C( \/ O- k
7.14.5 SAMA5D2处理器的设备树245" _+ a3 E. A! C7 p, Y1 c$ L" f
7.14.6 BCM2837处理器的设备树2474 @/ L" G {% T% |. \; {7 y8 l
7.14.7 “keyled类”模块的代码描述249
4 G0 Q; K- G( B2 C. y( L4 q7 G$ H- E7.15 代码清单7-3:keyled_imx_class.c255
5 y% o: V' _6 Y, K, I/ g( }" P H7.16 keyled_imx_class.ko演示264
9 B; |4 I! K) a3 |% \( x第8章 在Linux驱动中分配内存266/ n5 B( f J' T4 ^% t( r
8.1 查询ARM的MMU转换表267
. o* Z6 I& J6 f% O2 J( W) ]8.2 Linux地址的类型271
" q' B7 p8 A( K2 g$ W r8.3 用户进程的虚拟地址到物理地址的映射273% t- Q1 z6 m# n7 S7 k& r
8.4 内核的虚拟地址到物理地址的映射273+ S8 a: b3 T; A u/ l0 \9 d
8.5 内核内存分配器275
$ @4 q4 I# j/ E9 c9 O; M3 O8.5.1 页面分配器275
8 y N2 n6 F+ M i6 m8.5.2 页面分配器接口275/ q& r3 b I u
8.5.3 SLAB分配器276
5 \+ ^. Q# L; W8.5.4 SLAB分配器接口278+ J5 ?+ X2 \, a8 q. A8 h. V
8.5.5 kmalloc内存分配器279
2 L! i3 }7 T' a/ O8.6 实验8-1:“链表内存分配”模块280& w& I% G2 V W9 i) J# H5 N/ c0 _
8.7 代码清单8-1:linkedlist_imx_platform.c283
) U0 m0 ]. k3 h+ s* ]) }+ s/ A7 u8.8 linkedlist_imx_platform.ko演示287
+ J& x: n: O# J9 y9 A2 ?* w第9章 在Linux设备驱动中使用DMA2886 h/ d+ O) D7 Z( U
9.1 缓存一致性288
5 \! r4 t" o$ X9.2 Linux DMA引擎API289
& f1 F: k- H8 a8 t9.3 实验9-1:“流式DMA”模块295, c* i+ k6 V( `6 |
9.4 代码清单9-1:sdma_imx_m2m.c3021 a/ Q+ c9 _5 ^, S
9.5 sdma_imx_m2m.ko演示 306
6 j( l+ |* P) [$ A- F% O0 O6 a, m( v9.6 DMA分散/聚集映射306
& |- R; t0 p# }2 n, N! \% `9.7 实验9-2:“分散/聚集DMA设备”模块 307
0 o! o; N& s3 r1 }6 [( d6 {9.8 代码清单9-2:sdma_imx_sg_m2m.c310
* ?* ~# v# M k d* T6 V& J9.9 sdma_imx_sg_m2m.ko演示 315
9 {% j5 o9 ? h6 ?0 N5 ~9.10 用户态DMA315
& ~8 F/ s2 I7 {. y2 _9.11 实验9-3:“用户态DMA”模块317+ t$ G' E5 b8 \7 t: B5 J7 Q
9.12 代码清单9-3:sdma_imx_mmap.c319! `/ U7 \/ g# Z' K5 ^# |7 `: Q
9.13 代码清单9-4:sdma.c3239 p& I* A% x2 K ~: m. v8 I2 B
9.14 sdma_imx_mmap.ko演示3241 H9 Q, g Z$ b# T6 B M2 L
第10章 输入子系统设备驱动框架325
( b% P+ Z+ ~, m1 O10.1 输入子系统驱动程序326; [. d3 Z( @# C# A: v% a
10.2 实验10-1:“输入子系统加速度计”模块3279 p5 y. i* q% \
10.2.1 设备树329( p8 H2 I$ k8 x0 M3 \7 k' X6 q
10.2.2 使用I2C交互的输入框架330, z! v; q9 o: ~& C7 {
10.2.3 使用输入设备的输入框架331- _: k1 n8 p9 B3 k" z; C
10.3 代码清单10-1:i2c_imx_accel.c3341 J9 p9 F' C# ~( m4 k r
10.4 i2c_imx_accel.ko演示336, X/ b2 \9 @3 \: M9 o3 X
10.5 在Linux中使用SPI337, \2 t& b) u$ C/ D7 G9 p2 y) h( X8 x
10.6 Linux的SPI子系统339java8.com2 E. R3 V2 S6 [0 D$ o1 y/ R; l& e
10.7 编写SPI从设备驱动程序 342
Q+ h1 M% r; V; _8 O; N( S7 e10.7.1 注册SPI从设备驱动程序 342
7 E- K3 _: m8 J. c# ~8 c10.7.2 在设备树中声明SPI设备343* k+ ?; m9 f* h+ [
10.8 实验10-2:“SPI加速度计输入设备”模块346
, M+ u( y+ ?4 O' B& E10.8.1 i.MX7D 处理器的硬件描述347
! h6 n1 l# [! C# O, S- {2 t; Q# |10.8.2 SAMA5D2处理器的硬件描述 347" q/ @* M+ X& H/ l
10.8.3 BCM2837处理器的硬件描述 348
5 Y) Q: H5 A- H5 ]$ t& U10.8.4 i.MX7D处理器的设备树3484 `' {2 {! ?( _( a
10.8.5 SAMA5D2处理器的设备树 349 h" f" t W6 {8 j
10.8.6 BCM2837处理器的设* b& H i1 l9 d1 P/ q& k
百度云盘下载地址(完全免费-绝无套路):
, X/ c; F* v+ E4 h7 M9 l- j2 u |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|