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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Linux 引导过程
——疯壳·嵌入式平板开发
8 y) J# n: X0 _- G( M) @
+ u5 o6 u8 `% i7 Z

4 y6 h( Q6 J2 K9 Q$ n* x  Linux 内核与 Android 系统 linux 内核有什么区别?
  Y$ a$ z& n2 W: I( a  什么是引导装载程序?
/ k$ ^9 a/ d1 X2 S4 N) E  什么是 Zygote?
. u$ U+ ?. _6 A$ `9 u* c. N. P  什么是 init.rc?" f2 y  F6 k0 e7 N* l* `: s1 `* r
  什么是系统服务?
# l2 |. v: m2 M8 t, U+ O  |# H. J+ W. T4 X- J$ S
第一节 Android 启动步骤
& b$ g& ~# K* p9 C& ^. w3 |( K
% @4 p7 b( h, ]  [0 o9 m
5 N4 e. D7 U' m3 J* g图1" S9 }# ^* y! o# ~+ b* _

7 ^1 d$ l' v! l2 m5 ]2 r! D% @2 C0 @5 @$ F, {
第二节 引导程序 --- Boot Loader) t% I" @/ e) s5 \$ y
  源代码目录:$(dir)\rk3128-source\u-boot
: g' @6 r1 X  d; W' \$ S
; ?# d! ?& ^9 ?6 t0 K% T' c
4 e  z6 V4 {$ w0 H! c) d8 |- g8 F6 i0 L7 o- I
第三节 内核 --- Kernel
8 [& V( z1 R2 y+ Z& i% Q# ~  Android 内核就是 Linux。内核启动时,设置硬件,挂载文件系统,执行第一个应用程序init。$ V6 N, M" v& r! ^2 l$ J. r  ]

5 _. x. z. }' [% r5 j1 m
/ A' E% h& [, y; K1 U1 _( a4 }3 t& G; {( \
第四节 Init 进程
  D6 V( q, h9 r, v  init 是第一个进程,可以说它是 root 进程或者所有进程的父进程。init 进程有两个责任, 一是挂载目录,比如/sys、/dev、/proc,二是运行 init.rc 脚本。对于 init.rc 文件,Android 中有特定的格式以及规则。在 Android 中,我们叫做 Android 初始化语言。
5 I  P! t2 i4 L( E* N6 M  init.rc 位于目录$(dir)\rk3128-source\device\rockchip\rksdk
7 M$ [( q1 |+ h. \  Android 初始化语言由四大类型的声明组成,即 Actions(动作)、Commands(命令)、Services(服务)、以及 Options(选项)。
# P9 G8 B' C) }$ c: g. b; I  Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。) E  ]4 a- I4 L$ i0 [- @# s
语法:
. u* _) L- Q7 D* e  on <trigger>
- ]6 q3 b" K" F
1 P$ n9 Q; ?' N- G; k  <command>
* @  a/ Y3 v" u4 E* X; M0 `7 I2 k2 R
  <command>8 R9 _0 D  a' M& x4 i4 w

: Z" w/ i! H, S4 p. J8 _  <command>" p# R, Z" A8 X# Z  X6 e" O

8 G% f  \# X2 R* t5 `  Service 是 init 加载的和是退出重启的(可选)程序。Service 具有如下格式:
2 r+ z' L: l/ Q  service <name> <pathname> [ <argument> ]*
* ?. D) Z- {% }2 v% Z  V
3 U9 t5 {" m* i1 m+ V! N  <option>! I5 B3 C3 b# H5 b& x

: i$ J7 b  d  n" R$ B  O( Y  <option>
6 N! {+ C+ ~3 C, F* Z2 Y4 w
- d- G$ m- K, Y3 N2 ^  ...
& u. [, `, i: X7 c  Options(选项); ?0 c  H6 [9 n5 R" k: P
  选项是对服务的描述,它们影响 init 进程如何以及何时启动服务。( r" x4 v$ Z3 H' a$ x' D" S
  来看看默认的 init.rc 文件。这里只列出了主要的事件以及服务。
  [( N4 P. V8 J( Q: j, [Table
; h/ O$ V4 @) Y) b
. u4 \+ i4 f$ o, j . K0 H) K2 e9 Z, v  r6 j! p" f
图2& W, [. I( {% W
  在这个阶段你可以在设备的屏幕上看到“android”logo 了。& S; s# {8 x' b7 y- V; X# a
4 o- i0 X) ^  ?: Q( _& `

' A6 H) {9 n- }% [) ?/ T0 K' i; X第五节 Zygote
- ^5 h! M. _2 N1 V' x2 p  |! N  在 Java 中,不同的虚拟机实例会为不同的应用分配不同的内存。但如果 Android 系统为每一个应用启动不同的 Dalvik 虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android 系统创造了”Zygote”,Zygote 让 Dalvik 虚拟机共享代码、低内存占用以及最小的启动时间成为可能。
# \; H+ |7 i! [6 e9 @9 c2 y  a' ~+ J. g, ^
- r& i1 `6 M3 m8 p7 c2 c, N
第六节 系统服务或服务! ?% r. |$ d7 s7 r- b0 C
  完成了上面几步之后,运行环境请求 Zygote 运行系统服务。系统服务同时使用 native以及 java 编写,系统服务可以认为是一个进程,系统服务包含了所有的 System Services。- H5 r) G2 ]- u" Z/ Z
  Zygote 创建新的进程去启动系统服务,可以在 ZygoteInit 类的”startSystemServer”方法$ S+ g2 n4 X  k1 N
中找到源代码。
5 ~4 p+ P, \# U9 j6 J# ?) i
& `/ ]3 S! `5 S1 M5 v0 l2 _6 F
第七节 引导完成
- j0 ^3 A2 c0 M- _. F; U# C1 J  一旦系统服务在内存中跑起来了, Android 就完成了引导过程。 在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。) R. Z% Q6 P- l- h
6 M5 u7 ^1 U2 L/ h9 R1 ^
/ Z/ k/ t) S3 c% V+ F1 H
第八节 实验
& T9 w' Y; A2 m- v  init.rc 中增加一条启动参数 setprop fengke.test 100
6 z' G: W+ i9 ]6 ]0 ]) H3 o
6 m3 c0 Z2 p( }" {4 T/ e2 K
: i# V# T# }. K7 A6 r第九节 实验现象& i3 S" H" P, `3 x0 t; ^
  系统启动后用 getprop fengke.test 来看是否这个值已经写入; w9 T5 A6 C9 p9 P

" l  K. W/ \1 d( g2 i
- O6 C+ Q6 ^0 G$ G9 X% q) J9 n图38 s/ ]8 p  D" O6 y  L, l! D
/ x! Y5 Z! {# V6 }9 @, S
, u: `: p8 E3 Q' ]7 F2 r; k% l. @

; B1 D& g) z4 m+ u$ F9 y; }& a6 [
- K  _5 I( w+ p: J0 G' A. B* x- c文件下载请点击: 1、Linux引导过程.pdf (409.72 KB, 下载次数: 0)
6 y: L# \2 A1 f, p, ^/ E, _- L
9 x3 c8 I) r  N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 02:49 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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