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

来源:互联网 发布:java打印等边三角形用 编辑:程序博客网 时间:2024/05/17 02:56
《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 0
原创粉丝点击