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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Linux 引导过程
——疯壳·嵌入式平板开发

% _/ ?, _6 \7 \$ P( }+ P5 b, r- a( n0 I* F/ e' e
' C/ F8 @; S- x9 ^
  Linux 内核与 Android 系统 linux 内核有什么区别? % G! _1 W  h7 o; a) r
  什么是引导装载程序?
+ _& o3 z0 e/ {! ]+ M) q* u# k+ a% }  什么是 Zygote?
0 T9 [: L! q$ X$ i( ]/ v  什么是 init.rc?
* Y8 N' W4 \3 ]1 t# B5 s3 q  什么是系统服务?
% P9 L0 d' n" k
8 x: `, m5 b9 g第一节 Android 启动步骤
1 P$ Q; ~( a7 \- b( R( N) u8 d% D1 x0 t3 |
. M9 K& }7 s" P) o& n8 }$ ^  _$ \2 F
图15 m" Y' f6 W9 c' e. Y+ g' |1 O8 l. Q
6 i* M% M) x$ t8 U& v' U* X

' Z' i! b' t& G$ ~( B第二节 引导程序 --- Boot Loader: _! A, O; w; B  X
  源代码目录:$(dir)\rk3128-source\u-boot- o5 ^4 q) z7 H, w

8 l+ s+ }9 f+ T3 a3 ~- Z
; B" z7 }( \$ n6 b# V4 n4 g( V  \2 o" B
第三节 内核 --- Kernel2 O7 g+ i, J" O* C$ Z' W/ I
  Android 内核就是 Linux。内核启动时,设置硬件,挂载文件系统,执行第一个应用程序init。
' s2 C& V5 B( u6 @+ R. W+ O$ Z2 ]; z% g( f" {) V

5 |/ {9 i: i2 |, k# v
- s5 s  b6 l6 P" s第四节 Init 进程
1 R7 u' @% ?/ d! ?+ c4 M& f! C  init 是第一个进程,可以说它是 root 进程或者所有进程的父进程。init 进程有两个责任, 一是挂载目录,比如/sys、/dev、/proc,二是运行 init.rc 脚本。对于 init.rc 文件,Android 中有特定的格式以及规则。在 Android 中,我们叫做 Android 初始化语言。3 z( z* ~, V0 r5 \; y
  init.rc 位于目录$(dir)\rk3128-source\device\rockchip\rksdk
- t+ }" ], N% @  Android 初始化语言由四大类型的声明组成,即 Actions(动作)、Commands(命令)、Services(服务)、以及 Options(选项)。# y" S& B* `8 K1 b/ Q
  Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。; f( m8 C' h# R) H" g- l
语法:
8 u4 B1 z$ j* c& o4 \4 I2 ?% q  on <trigger>
; O/ Y* o5 q. C& R7 {) m) u, F. H! X/ b8 d9 w
  <command>7 X4 A1 f8 l# o
* g1 @2 Q3 }: m1 N
  <command>
# I4 b. O) p2 i( J( ~2 I
# \1 y2 c  C9 r% h2 ]! T$ E  <command>4 W4 v# q: ]! r5 V

" }3 f6 b7 H; [  Service 是 init 加载的和是退出重启的(可选)程序。Service 具有如下格式:
1 a' ~; m: S1 S7 n  service <name> <pathname> [ <argument> ]*7 i2 ~, l( J# l1 y6 I1 O

8 m6 r, m( N; X3 h6 |& H  <option>5 X* m) e1 \1 I
' Z1 L  ]) R6 }4 N) n' {
  <option>+ ]/ F* O+ J1 G. _' W
, X0 a9 N/ c2 e
  ...
* C0 W  [4 k$ I! V( ^+ ~  Options(选项)
1 L8 x( F2 o8 b& E  选项是对服务的描述,它们影响 init 进程如何以及何时启动服务。- O) o: c2 R. ]; V: ?8 `
  来看看默认的 init.rc 文件。这里只列出了主要的事件以及服务。
4 Z4 v/ `9 r& q5 [- e5 Q9 yTable
$ i, A# f0 {6 i4 \4 A
( K# u" x6 F% Y4 z2 J* r; k  f
: t% n# @* X& V6 {( b! X图2
) }3 I: V% E" F& H& B2 O  在这个阶段你可以在设备的屏幕上看到“android”logo 了。
' |( O0 M" G6 X0 _. z. F
. V9 A+ B- Q1 t& l* d( @
: N! b. H! H1 o7 ^: K; L5 i第五节 Zygote5 y. j) Z$ j, S7 K0 y" u# `% L
  在 Java 中,不同的虚拟机实例会为不同的应用分配不同的内存。但如果 Android 系统为每一个应用启动不同的 Dalvik 虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android 系统创造了”Zygote”,Zygote 让 Dalvik 虚拟机共享代码、低内存占用以及最小的启动时间成为可能。9 m8 m* k- z& P2 K1 E, w

+ v/ S, ?6 Q, K' f- R* z7 @: x3 t- ?; E6 m
第六节 系统服务或服务; I: ^  t2 t7 t; `/ z
  完成了上面几步之后,运行环境请求 Zygote 运行系统服务。系统服务同时使用 native以及 java 编写,系统服务可以认为是一个进程,系统服务包含了所有的 System Services。
: t8 Q! |3 n- @: R# L$ F  Zygote 创建新的进程去启动系统服务,可以在 ZygoteInit 类的”startSystemServer”方法* b& t% V# X# c! A- {
中找到源代码。
0 m5 X! V, x. q2 k. e" F" t9 ^4 W% t$ e& [- E4 b

3 ~8 J2 _7 E5 j第七节 引导完成
" R5 @3 u3 D  c2 ]  一旦系统服务在内存中跑起来了, Android 就完成了引导过程。 在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。
5 v" u3 y  f* k% E- L$ t1 K
- G2 G0 E8 o) ]" R: Z/ X# z* S! X
5 K# J% _0 i" f& M- F第八节 实验
0 G1 h6 D4 V  J; q8 K9 |7 F( s  }  init.rc 中增加一条启动参数 setprop fengke.test 100
% m. \! _5 h; y
% ^3 i: z$ g# C  \0 M8 O1 n2 \/ w6 r: K7 D3 r3 f9 j  D" P0 H/ a% N
第九节 实验现象- l2 X. h- p; }. f+ R9 |+ r# E
  系统启动后用 getprop fengke.test 来看是否这个值已经写入+ I) F8 G! _' A. W: _

6 ~+ i. |, f8 c5 B0 X+ _ ) R1 U* W" m& H0 w
图3
; x  E) _. u3 l% \4 h0 j2 H* l' {" S4 k& l  ^

4 e, }9 d9 \9 x$ w% U- q
8 `$ U: W" J6 y7 D( h8 n3 Q0 h, j! y4 }2 K, R% \
文件下载请点击: 1、Linux引导过程.pdf (409.72 KB, 下载次数: 0) 1 W1 C. D9 O- ^2 j9 {+ a( o, H# L

) I% A, @% l( |# m1 v9 L! E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-29 04:42 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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