《Android内核剖析》笔记 第1章 Linux基础

1. Android的底层任务管理及驱动都是基于Linux系统的;

2. Linux系统使用的文件系统与Windows(存储类文件系统)差别很大,采用的是根文件系统(rootfs),特点如下:

  1. Linux系统中所有的资源都是文件,比如磁盘、U盘、内存、网络等硬件设备,当然还有磁盘上的数据文件;
  2. sys/proc/dev这三个目录他们对应的不是存储空间,而是设备文件,由内核及相应驱动程序维护;
  3. 存储类文件系统不能和rootfs并列存在,只能挂载到子目录上,相应的命令为mount/umount;
  4. 与Windows对应的存储类文件系统包括ext2/ext3/ext4/yaffs;
3. Linux启动过程
  1. 开机并执行bootloader程序:
    1. 给系统供电,硬件电路产生确定的复位时序,确保CPU最后被复位,不然当CPU工作时其他硬件(比如内存、硬盘等)的寄存器还没准备好;
    2. 复位之后CPU执行第一条指令,该指令对应的内存地址应该是固定的,一般由CPU的制造者指定,这段固定地址保存的程序就是所谓的“引导程序”Bootloader;
  2. 操作系统内核初始化,包括初始化各种硬件,包括内存、网络接口、输入设备等,然后建立各种内部数据结构用于多线程调度和内存管理等;
  3. 执行第一个应用程序,传统的Linux就是一个Terminal;其实就是提供一个入口可以启动其他应用程序;


4.  Android启动过程
  1. Android系统大多都运行于ARM处理器中,当复位完毕之后,CPU执行的第一条指令一般是位于ROM(一般是Nand Flash)中的uboot/fastboot,就是对应Linux系统下的bootloader;作用就是初始化某些硬件接口(比如Nand Flash接口、USB口),并提供一些调试功能,比如像Nand Flash中写入新数据,可用于开发过程中的内核烧写、升级等;
  2. uboot被装载之后一般会检测用户是否按下了某些特别按键(uboot在编译时就预先约定好的)进入调试模式;若没有特别按键,则uboot直接从Nand Flash中装载Linux内核并进行初始化;
  3. 执行第一个Android应用程序Home,或者叫Laucher;
5. 了解Make命令、MakeFile文件,对于C/C++程序而言自动化编译打包必备工具,和java中的ant功能类似;其基本语法为:
          目标(Target) : 条件(prerequest)
          (Tab键)命令
  1. 目标Target可以是任意的字符串、或者某个文件名称;
  2. 条件prerequest可以是具体的文件名称,也可以是某个目标Target;
  3. 执行make脚本时,Make解释器会检查目标与条件中包含的文件时间戳是否相同,若不同,则执行Tab键后面的命令,命令可以是任意的可执行程序;
  4. 一些常用到的make语法说明如下:
    1. $符号为函数调用符,函数可以分为三类(多个参数用,分割):
      1. $(fname param…) 此时调用的函数为Make解释器内部定义好的函数,在脚本中的任何地方都可直接调用
      2. $(call frame,param…) 此时调用的是用户用define关键字生命的自定义、带参数函数
      3. $(fname) 此时调用的是宏,即用户自定义的无参数函数
    2. .PHONY关键字用于声明一个目标,被声明的目标将总是执行Tab键后的命令,而不管条件和目标中文件的时间戳是否相同;
    3. 命令前可以加@符号,表示在控制台不显示该条命令;默认情况下是会自动打印的;
    4. 在使用define声明自定义函数中可以用$(N)来获取输入参数,$(0)代表函数名称,$(1)就代表第一个输入参数,以此类推;
    5. Make解释器内有很多内置符号,均以$打头,比如$@就代表target目标名称;
    6. --directory(-c) 可以指定要执行的MakeFile/MakeFile.mk的路径;
    7. --file(-f) 可以指定要执行的MakeFile名称,指定的名称可以自定义,只要满足make语法规则即可;
    8. --just-print(-n) 仅仅打印出要执行的命令,而不是真正执行目标对应的命令;该选项在后面的分析Android编译系统时非常有用;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值