|
Java电子书:嵌入式Linux设备驱动程序开发指南(原书第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com# }3 K2 Y# ~+ b5 |2 Z: x0 u
7 S. {" f# W1 z" t4 z# D5 Z: \7 S) w% p) R& Z
编号:mudaima-P0320【Java吧 java8.com】- S: d# n" V2 q z( M; b
7 }( t& h3 [3 G
7 }& O. e. x4 {/ v' L# [
0 J v" F* x, [( S4 pJava电子书目录:第1章 构建系统11 y1 O1 _/ l8 N1 }' ?. a
1.1 引导加载程序1$ C% A+ _9 h( S8 d' ]8 H
1.2 Linux内核3
5 Y% w( y, ?0 R7 [" Q8 V1.3 系统调用接口和C运行时库63 I* i& d, j& I/ W
1.4 系统共享库7! i) {; G$ \0 G9 K# \7 O) q& {
1.5 根文件系统8
2 w0 t( l8 _+ |( D/ {1.6 Linux启动过程9
6 M0 Z; {; l6 Q3 s& f' s1.7 构建嵌入式Linux系统10) C: m! |8 Z, W/ { Y0 V& f
1.8 设置以太网通信11
j1 ]9 z! t- V( c1.9 为NXP i.MX7D处理器构建嵌入式Linux系统11
$ f2 ^! [0 J! |6 `3 O8 m0 R# Y C1.9.1 简介12
4 Y( m) b" j$ y* ?/ u4 R1.9.2 主机软件包12
6 Y( C$ H) E. h4 ~" A3 G5 A3 d1.9.3 设置repo工具139 x4 R* u3 D0 Y# D5 K; w- r
1.9.4 Yocto工程的安装和映像构建131 b& r% Q% V' ?1 ?+ {
1.9.5 Yocto 之外的工作15
3 }$ X2 ^7 |( `3 e1.9.6 构建Linux内核18# q- Z' \3 K8 y a
1.9.7 安装TFTP服务器20
% s0 J6 Q8 E) p1 X$ A1.9.8 安装NFS服务器20
7 l5 N7 `3 M4 Y+ k% k1.9.9 设置U-Boot环境变量21
0 V! j) U- i6 @3 B1.10 为Microchip SAMA5D2处理器构建嵌入式Linux系统21/ I) z8 |% n8 n4 k! m3 [4 u2 a
1.10.1 简介22/ Z: i" i, d! ^/ L. J. l% Q
1.10.2 主机软件包22& f) Y' j3 [: E
1.10.3 Yocto工程的安装和映像构建22
8 H6 H' U/ e" g4 c* q, |1.10.4 Yocto 之外的工作25- t' e( U9 Z- _( s
1.10.5 构建Linux内核251 l. a+ `5 \6 a2 D
1.10.6 安装TFTP服务器27( r/ k; r+ k: P3 R6 F, N
1.10.7 安装NFS服务器274 S( W8 _7 I; N- l3 W
1.10.8 设置U-Boot环境变量28
! A1 v) b3 a: X1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统28
' v/ Y! K) B2 o& }$ i1.11.1 Raspbian28
4 r6 k% V' J4 D8 f9 r1.11.2 构建Linux内核29
3 j( W+ S9 M9 T" \' o' O# Q5 X8 q1.11.3 将文件复制到Raspberry Pi310 C7 [% R! T6 G7 ~' B
1.12 使用Eclipse33
" g; U: ^1 q( b* |1.12.1 用于内核源码的Eclipse配置33
3 {8 o: Z! E8 W( ^; q3 G/ B1.12.2 用于开发Linux驱动程序的Eclipse配置38& `5 x3 r2 l; E8 v
第2章 Linux设备与驱动模型42
; Y4 f# x2 u J1 h- g2.1 总线核心驱动424 h0 M0 o1 V1 I7 [
2.2 总线控制器驱动45
^, g# R. D8 B2 `2.3 设备驱动45
2 K, q! o4 u: z$ F5 G2 d4 ^! J4 h2.4 设备树简介46
/ N2 \: f6 D/ o第3章 简驱动程序50% N7 y8 o5 V1 \" j
3.1 许可证515 J& z0 i% C. e# }' C. p; L; V
3.2 实验3-1:“helloworld”模块51
. t5 s( |$ d. }) i+ X3.3 代码清单3-1:helloworld_imx.c522 k) C9 ?2 F. z& {% j1 n0 V; x& k
3.4 代码清单3-2:Makefile52
0 S0 [: F; E& a/ e5 K' m; @3.5 helloworld_imx.ko演示53
) s. g2 B1 r9 B" \5 D4 P6 |, K' o, H3.6 实验3-2:“带参数的helloworld”模块53* G! }7 E! X' i
3.7 代码清单3-3:helloworld_imx_with_parameters.c54
: W6 b; o* q4 ]# d2 n9 F+ j% s0 p3.8 helloworld_imx_with_parameters.ko演示54
, z6 j( |0 b/ E& a: j( q6 P" l6 n3.9 实验3-3:“helloworld计时”模块55 o( K. A/ U( \5 g3 D
3.10 代码清单3-4:helloworld_imx_with_timing.c553 F6 Z5 j+ C [- I2 M# b/ Z0 `& c
3.11 helloworld_imx_with_timing.ko演示563 W, f) Y4 a1 ~
第4章 字符设备驱动57
* C6 ~( f$ _ H4 m8 M: g/ t: n4.1 实验4-1:“helloworld字符设备”模块59, P# n" i+ t) W) U
4.2 代码清单4-1:helloworld_imx_char_driver.c63
4 [% W: l: W' l: n8 D/ k {: v ^4.3 代码清单4-2:Makefile65
" O4 H, A1 x6 D* O: m- I! X4.4 代码清单 4-3:ioctl_test.c65
9 p$ ?0 F- m7 P) e* r4.5 helloworld_imx_char_driver.ko演示66: [ m$ I( Y& c- s
4.6 将模块添加到内核构建66
, V# L9 b U" d! X0 O$ \( p4.7 使用设备文件系统创建设备文件67
) e3 b; a a7 i. D4.8 实验4-2:“class字符设备”模块68
: k" `$ M1 H3 N! A1 [4.9 代码清单4-4:helloworld_imx_class_driver.c70, }( n( W" w0 G) J" m: j( |
4.10 helloworld_imx_class_driver.ko演示72$ d6 U# h+ K; `) N% F6 m m& p
4.11 杂项字符设备驱动720 Z$ f( t& t9 ^+ d2 A+ G: p( N
4.12 实验4-3:“杂项字符设备”模块73
, F' t! M. j# [4 n. ~9 |# N4.13 代码清单4-5:misc_imx_driver.c74+ K9 I8 |, u, V% r8 G
4.14 misc_imx_driver.ko演示75
; G& {( B4 V: k* L% o5 h第5章 平台设备驱动76/ _$ _5 c2 w9 s4 M! Y
5.1 实验5-1:“平台设备”模块78
9 z* G4 ?- C4 l. X+ A& i5.2 代码清单5-1:hellokeys_imx.c817 y m: H! n9 N: [0 o% N' i
5.3 hellokeys_imx.ko演示82
2 m& v5 t6 R/ }2 _7 \* H4 [5.4 操作硬件的文档823 S/ d# {. t2 ?+ L/ m9 s
5.5 硬件命名约定83
( H& {4 ?5 p3 @5.6 引脚控制器84
0 w- h* s% W; H4 J: X5 }' _/ m$ S3 M5.7 引脚控制子系统86
+ q& h* C" J* R5.8 设备树引脚控制器绑定924 e, n. g) T* W% g6 w, M8 L- T
5.9 GPIO 控制器驱动96% o0 R/ H ~* u
5.10 GPIO描述符使用者接口98
- _, M8 N' Y7 p/ P9 w5.10.1 获取和释放GPIO98
- V4 v3 T0 j( u" k5 _0 e) i5.10.2 使用GPIO99
* V8 i: ~% o8 V( W j; U5.10.3 GPIO映射到中断99
& R! R; ]* w, X+ ~' D+ z7 n& j4 g% F# C5.10.4 GPIO设备树100
. z7 O; X# L, T$ s5.11 在内核和用户态之间交换数据100/ s* F! X( E2 ?1 a: M# D
5.12 MMIO(内存映射I/O)设备访问1016 m5 d. a' u7 Z% o* i6 [3 l" J
5.13 实验5-2:“RGB LED平台设备”模块103
# j' A0 Y4 f3 ]% Q5 q5.13.1 i.MX7D处理器的硬件描述103 S8 r5 _2 W: b. i' f( J! \. \
5.13.2 SAMA5D2处理器的硬件描述105
8 U$ u- p/ E6 G- N! ~5.13.3 BCM2837处理器的硬件描述107, M" k c* I6 ^4 m2 t2 P% w
5.13.4 i.MX7D处理器的设备树107" t# o( Z4 L+ g% N( W* ~' g
5.13.5 SAMA5D2处理器的设备树111) P% ]2 @. ~8 X6 {1 R2 ?, z
5.13.6 BCM2837处理器的设备树114( C; d' Q9 z; v* |
5.13.7 “RGB LED平台设备”模块的代码描述1159 H% ^: B. W. r/ C X B( e W/ W f) X
5.14 代码清单5-2:ledRGB_sam_platform.c119
8 X4 l# e' N z! ]0 u5 c t" Z5.15 ledRGB_sam_platform.ko演示124; r; D6 j; J' R! c. z4 U
5.16 平台驱动资源124' l; a: W+ |: e
5.17 Linux LED类126
% w- B2 T& H/ m5 i6 w8 {5 `5 Z5.18 实验5-3:“RGB LED类”模块128
, l/ G( r b5 ?' c7 P6 h5.18.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树128+ O9 L0 v% E- w" X( ^
5.18.2 “RGB LED类”模块的代码描述130/ W! d# B: s( X8 c/ c9 L: c
5.19 代码清单5.3:ledRGB_sam_class_platform.c134
) c8 U$ Q- j$ z4 ?$ J8 t- e5.20 ledRGB_sam_class_platform.ko演示1378 g P$ A6 ^3 ?( j& W6 N% @) F
5.21 用户态中的平台设备驱动137& J& I: z) H9 R: H) ~2 g1 F
5.22 用户定义的I/O:UIO139
' p# ~0 f% _4 B( ]5.22.1 UIO如何运转140! [: Z0 v# w0 k n9 @+ b: s
5.22.2 内核中的UIO API141 B3 V1 T( y# }# `
5.23 实验5-4:“LED UIO平台”模块142: Y! B- D8 h8 o
5.23.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树143
$ y4 T3 V0 j* J @/ n5.23.2 “LED UIO平台”模块的代码描述144
9 i4 s& a: @8 u6 G/ N! m; _8 q5.24 代码清单5-4:led_sam_UIO_platform.c1467 ? A1 b5 \/ O+ H
5.25 代码清单5-5:UIO_app.c148. J6 g" Q# y5 e+ @" @0 w1 k0 z; J
5.26 led_sam_UIO_platform.ko及UIO_app演示150
& Q0 j1 e# F% s2 P第6章 I2C从端驱动1511 h/ C' h) P$ ~, K4 m: |! N$ u
6.1 Linux I2C 子系统152
* P" q, v1 y& N8 q6.2 编写I2C 从端驱动1551 B! w7 r5 |3 d( D* T8 D
6.2.1 注册I2C从端驱动155; B% X& A$ {" ?- K1 k- Q! U
6.2.2 在设备树中声明I2C设备157
) B$ y- Q; N+ g5 G! ]6.3 实验6-1:“I2C I/O 扩展设备”模块159
" S7 } _2 @! S4 }- q6.3.1 i.MX7D处理器的硬件描述159- ?& \- r9 R6 L" T4 B2 |6 z
6.3.2 SAMA5D2 处理器的硬件描述159, A9 T- H& Z! G' I/ _6 R
6.3.3 BCM2837处理器的硬件描述160
! W8 _, [& d+ Z0 E6.3.4 i.MX7D处理器的设备树161
- h) v( z; {( H& F! ?& W6.3.5 SAMA5D2处理器的设备树162
. t, ?+ `* E$ J% ~6 T6.3.6 BCM2837处理器的设备树1632 e3 v* e# L/ X7 F
6.3.7 “I2C I/O扩展设备”模块的代码描述164
. n; U# _5 }# C6.4 代码清单6-1:io_imx_expander.c167
, K1 h6 P# E x- k a6.5 io_imx_expander.ko演示1707 D7 {9 }6 r- q' q, Y. C0 p
6.6 sysfs文件系统171
1 y$ v3 ?4 J7 M) ]6.7 实验6-2:“I2C多显LED”模块174
u$ Q3 u; _! [9 ]! o' W% A6.7.1 i.MX7D处理器的硬件描述175
2 x6 M2 {5 k! [ i$ N& o6.7.2 SAMA5D2处理器的硬件描述176( ^8 ~+ J- ]( F. ]4 F6 O' j
6.7.3 BCM2837处理器的硬件描述176( j% R0 A% r% l" E# [/ W# H
6.7.4 i.MX7D处理器的设备树177
4 b& }, P: t) R: X' n9 x: T6.7.5 SAMA5D2处理器的设备树178+ G9 j3 O+ e% a- g( {
6.7.6 BCM2837处理器的设备树180
% _/ x8 N( {' Q0 s+ g6.7.7 ACPI和设备树的统一设备属性接口181
1 _, M* b: v+ l, W6.7.8 “I2C多显LED”模块的代码描述182' D3 ~; S) \8 h$ G0 Q- U5 z: h
6.8 代码清单6-2:ltc3206_imx_led_class.c186
) [; _ o6 N7 t. G6.9 ltc3206_imx_led_class.ko演示192
% Q$ U8 I( I4 c第7章 处理设备驱动中的中断194
. V5 V% i' I n7.1 GPIO控制器在Linux内核的中断域196
+ b$ P) V- ? p7.2 设备树中断处理203
' Y, C$ J2 ~6 o9 z7.3 在Linux设备驱动中申请中断206
. n7 S! p! t' s& u3 R! j. h7.4 实验7-1:“按钮中断设备”模块2079 c. ~2 P9 d" k" A* { T
7.4.1 i.MX7D处理器的硬件描述208
/ T- G- l* |& x, b5 i! K7.4.2 SAMA5D2处理器的硬件描述208+ o1 ~3 h9 ?* o) v8 K7 Y
7.4.3 BCM2837处理器的硬件描述208
' u# H) g$ n- Z7 ^" e2 P1 T7.4.4 i.MX7D 处理器的设备树208
8 d4 d: [1 w' }/ T# n: {/ r7.4.5 SAMA5D2 处理器的设备树209% m" a, }/ H% o, ~6 L
7.4.6 BCM2837 处理器的设备树210( d: Q2 s* ~0 V/ m, H5 z: z5 E
7.4.7 “按钮中断设备”模块的代码描述211
" ?) m- h& ^" b7 `- W6 O& @7.5 代码清单7-1:int_imx_key.c213% w4 H; B% Z7 O$ p. \- ~- |$ n
7.6 int_imx_key.ko演示215
5 G0 z1 F' _. z# e7.7 延迟工作215
$ [! \, }: k! E! e7 s% j7.7.1 软中断216
n( k$ K3 o( Z7.7.2 tasklet2171 Y/ ]. [% }/ Y+ h8 [" S' ?" Z0 o1 Q1 M- l
7.7.3 定时器218. }% N8 O! E9 c8 x( Q
7.7.4 线程化的中断2210 x$ M3 N/ ]$ x, }4 f4 ^
7.7.5 工作队列223
( e7 `$ F1 ?" A/ S7.8 内核中的锁226# c5 s- y& ]+ u; p% @; P! {
7.8.1 锁和单处理器内核227
2 K2 p0 i& ]! ?2 G7.8.2 在中断和进程上下文之间共享自旋锁227$ w4 w4 J+ g- k/ s& |
7.8.3 在用户上下文使用锁2274 p+ C- b7 ~" j2 u
7.9 内核中的睡眠228
4 |1 R3 L% M( R7 R& d; x7.10 实验7-2:“睡眠设备”模块229
r1 m4 ]* w! }$ h7.10.1 i.MX7D处理器的设备树230* ~+ m$ B1 D( _* q, \% N# L
7.10.2 SAMA5D2处理器的设备树231
) G) _5 g" O! N7 P' w1 t, H7.10.3 BCM2837处理器的设备树232
: F! O1 Y3 ~4 P% W+ F7.10.4 “睡眠设备”模块的代码描述233
1 W" [9 x( E$ _0 S0 v3 D- A! s7.11 代码清单7-2:int_imx_key_wait.c2367 H4 S$ i( c5 ?, ]# x( t4 V- }+ n9 x, z
7.12 int_imx_key_wait.ko演示239
+ L* U9 g/ A9 Q3 L0 e3 g+ Z2 n7.13 内核线程239, Y; Q% u. C5 J: Y: V' Y
7.14 实验7-3:“keyled类”模块240& i+ W' [5 V$ q L, f0 J. \
7.14.1 i.MX7D处理器的硬件描述240
6 M5 k: ^7 a8 l# N( R' |- }7.14.2 SAMA5D2处理器的硬件描述241" e6 |1 l, i k4 [- X8 U% c
7.14.3 BCM2837处理器的硬件描述241
; L; w7 D* \* u* O' O' a7.14.4 i.MX7D 处理器的设备树2425 W4 F K; s6 N
7.14.5 SAMA5D2处理器的设备树245
7 {# X; t* E8 d8 W- P0 v7.14.6 BCM2837处理器的设备树247
+ F7 y3 m% }6 _* A* R2 D7.14.7 “keyled类”模块的代码描述249. ^/ p, D2 n/ G! ^
7.15 代码清单7-3:keyled_imx_class.c255& }) I" M& l' V0 G8 a# @$ [2 ?" _; p
7.16 keyled_imx_class.ko演示264 ^" c% j* d9 q4 G( M
第8章 在Linux驱动中分配内存266. o. ~, n5 F, [' x
8.1 查询ARM的MMU转换表267/ ]$ R5 y! ~, U. I
8.2 Linux地址的类型271
0 |! L. `# X- m- f; r5 Q8 M8.3 用户进程的虚拟地址到物理地址的映射273
$ j# V& a. H8 O0 |: Q8.4 内核的虚拟地址到物理地址的映射273( F# @. d" @) `& |* i- b8 ^
8.5 内核内存分配器275% o" o2 \! ^# V8 O6 x9 s6 J
8.5.1 页面分配器275
/ m& l4 ~! P/ s: g; t/ \0 _8.5.2 页面分配器接口275
& K* g4 a/ I9 l) F& m8.5.3 SLAB分配器276
: A# Y: H* r I' k8.5.4 SLAB分配器接口278
9 |7 S3 p2 h0 F' K8.5.5 kmalloc内存分配器279
. k2 [1 N2 G8 E) Q$ w2 x8.6 实验8-1:“链表内存分配”模块2808 \$ j/ j- ?- M2 l3 \
8.7 代码清单8-1:linkedlist_imx_platform.c283
( X. R2 n& g! z. z8.8 linkedlist_imx_platform.ko演示287$ q' G6 Q: z1 g8 Y. b9 ~# |( C
第9章 在Linux设备驱动中使用DMA288
- g. [5 A1 J y }( q9.1 缓存一致性288
% ?8 b+ x2 p% @% f; G- b9 `1 L9.2 Linux DMA引擎API289/ p2 a# K* I4 Y8 h6 `8 H! f k5 q% ?
9.3 实验9-1:“流式DMA”模块295
3 R/ O1 n3 K( d, F9.4 代码清单9-1:sdma_imx_m2m.c302
% J& G% }- u) \% f5 W9 x9.5 sdma_imx_m2m.ko演示 3067 k" d8 H. a1 M& I% n/ W4 M
9.6 DMA分散/聚集映射306
! f4 G. y6 |: Z7 y I" L9 b9.7 实验9-2:“分散/聚集DMA设备”模块 307% z& N: P2 z9 L) m, a
9.8 代码清单9-2:sdma_imx_sg_m2m.c310
0 B' P2 b X$ R/ f# ?. B) J9.9 sdma_imx_sg_m2m.ko演示 315
; J. y0 E4 o' N' I7 W9.10 用户态DMA3157 t- O( X+ {4 d7 E, U
9.11 实验9-3:“用户态DMA”模块3173 B! B3 S4 A4 Q! [ c3 ^0 O6 V
9.12 代码清单9-3:sdma_imx_mmap.c319
6 V: a7 q' |/ i3 l- j9.13 代码清单9-4:sdma.c323! s& t8 b& j7 t: x' U
9.14 sdma_imx_mmap.ko演示3243 v$ i9 `) B- F4 w' n0 e; p) m. M
第10章 输入子系统设备驱动框架325
; c: R" `0 N' E: D10.1 输入子系统驱动程序326
& K2 B+ F( n# d7 N7 C8 z/ }. ?. [. b10.2 实验10-1:“输入子系统加速度计”模块327
% ~2 ?5 J, }! w+ ~8 y5 o10.2.1 设备树329, v! s' }8 Q) R; O3 I* S* \; C2 K; e3 r
10.2.2 使用I2C交互的输入框架330
) m) X$ \ A& A6 [8 e10.2.3 使用输入设备的输入框架331
" V3 M6 ]1 Z8 v5 ^10.3 代码清单10-1:i2c_imx_accel.c3344 \3 g! K/ g+ J: B4 u3 x
10.4 i2c_imx_accel.ko演示336
: A4 i+ H; S0 O, c10.5 在Linux中使用SPI337
! K5 c: y2 _4 ~4 F6 b, ?10.6 Linux的SPI子系统339java8.com+ _9 v! @) Q' k5 R* P
10.7 编写SPI从设备驱动程序 342) `) u3 Q1 G2 |4 h) i
10.7.1 注册SPI从设备驱动程序 342
9 ~. A* R) ~; N+ M: p+ r10.7.2 在设备树中声明SPI设备343: ]8 w( G1 p5 P9 H; C
10.8 实验10-2:“SPI加速度计输入设备”模块346
8 b9 o a+ G' w: n" H8 X' f( n" L10.8.1 i.MX7D 处理器的硬件描述347" I" R% E& P- d. H
10.8.2 SAMA5D2处理器的硬件描述 347
/ r% {0 D! s M) Y4 f" F10.8.3 BCM2837处理器的硬件描述 348
7 V7 m1 n0 [8 Q! U% Y$ z/ |/ n10.8.4 i.MX7D处理器的设备树348
5 G; M7 t1 y; T/ ]: G# Y10.8.5 SAMA5D2处理器的设备树 349
1 ^. Z! G4 U/ F0 E10.8.6 BCM2837处理器的设
0 u5 R6 L' g8 Z" d百度云盘下载地址(完全免费-绝无套路):7 q& A% V7 M, }& L0 T- N: s9 n
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|