找回密码
 注册
关于网站域名变更的通知
查看: 133|回复: 0
打印 上一主题 下一主题

【嵌入式开发教程1】疯壳·平板电脑-Linux 引导过程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-27 14:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
Linux 引导过程
——疯壳·嵌入式平板开发
) O3 v: Q" b/ j1 W
5 U" S! L4 ~! f
0 }% g& e, _! {8 _7 m- u
  Linux 内核与 Android 系统 linux 内核有什么区别?
- O0 @6 m9 ?/ x3 ]  什么是引导装载程序?! v* b$ P& D+ @" S4 S, y* W$ e+ r9 y
  什么是 Zygote? 7 k2 K# V. H: Y* |+ W# a5 e  b
  什么是 init.rc?
# n+ ^1 W# L# F6 z; `+ u3 d: g  什么是系统服务?- {2 ?: \, M3 y6 T' ~

  G' g) J, C. Z/ J% d第一节 Android 启动步骤
  |+ `! |7 p4 f! @; D& A& r8 P' g6 `9 h4 J, D8 n
0 i4 r! O8 G3 h7 H6 u
图12 r8 ^* C+ L# t' D" o2 e
. n" [! X( X4 C* t& Z5 T1 n

8 {- t, I. `0 ~( Y% q. p( v2 ?% N第二节 引导程序 --- Boot Loader& z0 p4 \2 C+ {! _& a& P4 m
  源代码目录:$(dir)\rk3128-source\u-boot
  m" Z) Q4 y; y7 X+ R0 w
, C* ~, |2 u5 x
, C/ _: F/ z/ P/ [8 d+ i
6 p, ?. W# N4 \) |. B$ S, V0 \1 o第三节 内核 --- Kernel) e. R. x, `& M; [0 C
  Android 内核就是 Linux。内核启动时,设置硬件,挂载文件系统,执行第一个应用程序init。( X* v, X( {" r+ k( \3 F
2 `/ q  Q' \. z

, p4 ~/ K6 {: d( P
% e' \9 D. \& e4 ^8 a0 s1 f第四节 Init 进程
0 _: e0 ]( D/ y$ s/ o; s- o$ J0 X  init 是第一个进程,可以说它是 root 进程或者所有进程的父进程。init 进程有两个责任, 一是挂载目录,比如/sys、/dev、/proc,二是运行 init.rc 脚本。对于 init.rc 文件,Android 中有特定的格式以及规则。在 Android 中,我们叫做 Android 初始化语言。" u4 Q0 k) U4 Y) j
  init.rc 位于目录$(dir)\rk3128-source\device\rockchip\rksdk* k  y( p' n9 w8 u3 f. Q6 ]
  Android 初始化语言由四大类型的声明组成,即 Actions(动作)、Commands(命令)、Services(服务)、以及 Options(选项)。
8 u& @8 h8 u8 r1 {( y  Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。. c- n' f$ A# |; T
语法:7 \& C, |) [/ j$ ~! z, l  u- s' R
  on <trigger>$ z! @" J4 B) N# h

6 G/ s0 s* x7 d2 {9 E3 e$ _  <command>
/ P2 Y  J/ O  [9 H
: y2 R2 `( N, g$ C5 Z5 q# r9 K  <command>
- P. m% ^: N: _1 {  v% R: D, B3 K; L4 t
  <command>
5 m4 n( Q9 z2 q2 Q0 F) E2 A' c% x2 y
  Service 是 init 加载的和是退出重启的(可选)程序。Service 具有如下格式:4 E# N1 P# }, |
  service <name> <pathname> [ <argument> ]*
8 J- ?, C# i! I4 t7 N8 s+ {  F) s" o5 [$ J% n4 ]; n+ R
  <option>7 @% L! I  t& _  y& m' [2 B; W
0 L- w* o3 b7 G# e2 u
  <option>
; x& i; L: l% m3 ?* l
! Q* j6 ]- q; P% m8 Y  ...6 Y/ A% X. Y" _$ K# I. ~2 O' h( c
  Options(选项)
2 i8 U* C$ l* V  选项是对服务的描述,它们影响 init 进程如何以及何时启动服务。5 ~& e3 ]& r( q: c$ Y
  来看看默认的 init.rc 文件。这里只列出了主要的事件以及服务。" T3 R% x; K* c5 U. ~
Table
) C- J6 ], q) \. D& y( d+ i" n, S8 e5 a+ I

6 V& R5 Z+ P- u7 v1 Q5 h/ ]图23 b* G. C/ T5 Z5 {
  在这个阶段你可以在设备的屏幕上看到“android”logo 了。
; G- B/ `  L3 ]" Q9 S# X; g' J8 }6 Z8 ]
# I! M" \  [3 V% \. h  H( T
第五节 Zygote
2 ]% x8 G5 k' l0 S: u8 t  p  在 Java 中,不同的虚拟机实例会为不同的应用分配不同的内存。但如果 Android 系统为每一个应用启动不同的 Dalvik 虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android 系统创造了”Zygote”,Zygote 让 Dalvik 虚拟机共享代码、低内存占用以及最小的启动时间成为可能。9 H. f! {& A* G3 \3 [" |

1 v/ L/ A- `- F! S9 c4 A
9 j' k; g) a) O, s0 k. I1 W第六节 系统服务或服务. a/ Q: B) L0 c
  完成了上面几步之后,运行环境请求 Zygote 运行系统服务。系统服务同时使用 native以及 java 编写,系统服务可以认为是一个进程,系统服务包含了所有的 System Services。2 b; Q- {! e* j+ ]+ m; G% h$ r
  Zygote 创建新的进程去启动系统服务,可以在 ZygoteInit 类的”startSystemServer”方法  f) [! Z$ c' g1 e& G, ~0 T: N
中找到源代码。$ W* Q! |5 }6 E" e
7 W* \$ E/ W5 L

( z  g+ j2 I, L! E3 V6 C0 z0 d4 x第七节 引导完成4 O* X; [/ [4 f. Z% l) {
  一旦系统服务在内存中跑起来了, Android 就完成了引导过程。 在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。
$ t- F1 z) @- _( a  a- y+ V# F
5 Z( z; m: H- V4 V% }' B: V
. J4 k5 R. z: i2 t第八节 实验
2 D5 W2 G6 u! \8 H: W  _  init.rc 中增加一条启动参数 setprop fengke.test 1004 P; A* K/ r6 \$ G; {! w

, }  G" g( _4 Y+ y  y1 ]5 e9 @
* V6 T: E8 \, R3 g7 b第九节 实验现象" m0 O$ f$ _5 ^# O7 k0 L6 C# G) D+ Q4 K
  系统启动后用 getprop fengke.test 来看是否这个值已经写入! r5 R5 }) w( K0 j: ?% s3 w% A

! I, u& l  q! M! k) w$ d; L - I3 z  @/ e, w" s+ i
图36 ^% R( J' m+ a- h; ]9 o. n
5 {7 O3 G, F; O" \0 a" q/ L  {
6 p, f7 A( X. \9 x6 X
8 Y: d/ e7 E8 r+ y+ k$ T+ r0 \
+ x/ D; v; |- d+ y9 ~
文件下载请点击: 1、Linux引导过程.pdf (409.72 KB, 下载次数: 0)
: J- F4 P# C2 U) Z" u& Z2 Z. c: T+ j* ~& f2 T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-13 06:53 , Processed in 0.140625 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表