Chinaunix首页 | 论坛 | 博客
  • 博客访问: 393225
  • 博文数量: 119
  • 博客积分: 1796
  • 博客等级: 上尉
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 10:16
个人简介

守正

文章分类
文章存档

2013年(1)

2011年(40)

2010年(78)

分类: 嵌入式

2010-10-03 10:37:06

原文地址:http://blog.chinaunix.net/u1/49742/showart_2077813.html
内容太长,在一片blog中居然放不下。将其打包放在rar文件中,作为备份吧。该文中主要涉及如下内容:
===============总目录====================
linux ,Android基础知识总结
1. Android编译系统分析
2. 文件系统分析
3. 制作交叉工具链
4. 软件编译常识
5. 设置模块流程分析
6. linux系统启动流程分析
7. linux下svn使用指南
8. LFS 相关
9. linux 内核的初步理解
======================================

================
android系统开发指南(常用环境的搭建和使用)
说明:
有的步骤会用到脚本简化操作,脚本通过svn服务器获取:
svn co svn://192.168.2.148/smartphone/td0901/release/images/scripts
用户名为各位的姓名拼音,密码与用户名相同

一  编译android源码,制作文件系统
  下载源码
  编译源码
  编译内核
  搭建网络开发环境
  这是用于android内核和驱动开发的开发环境知识

二  ubuntu下烧录内核和文件系统
  ubuntu下通过tftp等工具,将内核和文件系统烧录进设备flash中的步骤和方法分析

============================
涉及的内容:
svn服务器的使用
android的编译系统,原理,工具链,辅助工具,参数等,环境变量,怎样单独添加编译一个单独的模块等。
android 的编译结果:文件系统分析
文件系统的使用,启动流程
设置模块流程分析
============================

==================================
1. Android编译系统分析
======================================
2. 文件系统分析
2.1 文件系统概述
2.2 ext2 ,ext3 文件系统
2.3 jffs,jffs2 文件系统
2.4 yafss,yaffs2 文件系统
2.5 虚拟文件系统(sysfs,proc,tsmpfs等)
2.6 一些必要重要的系统文件 ( /etc/fstab ,inittab,init.rc等)
2.7 制作文件系统 
======================================
6. linux系统启动流程分析
6.1 桌面操作系统启动流程(redhat,federa,ubuntu)
6.2 小型嵌入式系统启动流程
6.3 android 系统启动流程
==============
Zygote 服务概论:
Zygote 是android 系统中最重要的一个服务,它将一步一步完成下面的任务:
start Android Java Runtime and start system server. It’s the most important service. The source is in device/servers/app.
1. 创建JAVA 虚拟机
2. 为JAVA 虚拟机注册android 本地函数
3. 调用 com.android.internal.os.ZygoteInit 类中的main函数,android/com/android/internal/os/ZygoteInit.java.
a) 装载ZygoteInit类
b) 注册zygote socket
c) 装载preload classes(the default file is device/java/android/preloaded-classes)
d) 装载Load preload 资源
e) 调用 Zygote::forkSystemServer (定义在./dalvik/vm/InternalNative.c)来fork一个新的进程,在新进程中调用 
com.android.server.SystemServer 的main函数。
a) 装载 libandroid_servers.so库
bb) 调用JNI native init1 函数 (device/libs/android_servers/com_android_server_SystemServers)

/////////////////////////////////////////////////       

init 守护进程:
//andriod init 函数启动过程分析:
=================================================
7. linux下svn使用指南
1.1 服务器端配置说明
1.1.3 配置用户和权限
1.1.4 导入工程到仓库中
1.2 客户端操作指南及使用规范
1.2.1 检出工作拷贝
1.2.2 svn update 更新别人做的更改
1.2.2.1 svn update 获取最新版本
1.2.2.2 svn update  -r 获取特定的版本
1.2.3 svn st 查看文件状态信息
1.2.4 svn log 查看log信息
1.2.5 svn diff 查看文件修改详情
1.2.6 svn list 显示版本库的文件列表
1.2.8 svn add 增加目录或者文件
1.2.9 svn delete 删除目录或者文件
1.2.10 svn revert 取消本地修改
1.2.11 svn commit 提交本地做的更改
1.2.12 文件更新,提交时的冲突处理
1.2.13 打标签
1.2.14 清除缓存的认证信息,重新输入用户名和密码
================================================
8. LFS 相关
7.1 lfs 相关资源
7.2 LFS问题解答

3.关于文件系统:按照我的理解,文件系统是内核提供支持的,可以看作是一种协议,提供一种数据组织方式,每个设备必须有自己的文件系统。
不同文件系统的存储设备的数据组织形式不同。mke2fs -jv /dev/默认在上面创建EXT3的文件系统吗?既然这样的话为什么
我们还需要把以ext3挂载到一个目录呢?如果不是 的话,又是创建什么文件系统呢?为什么第六章中挂载了虚拟内核文件系统之后才能
进入chroot环境呢?
参考章节:文件系统概述

4.虚拟文件系统.作用.什么?
虚拟内核文件系统(Virtual Kernel File Systems),是指那些是由内核产生但并不存在于硬盘上(存在于内存中)的文件系统,他们
被用来与内核进行通信。

5.符号链接 和硬链接的区别是什么?什么是符号链接?什么是硬链接?为什么liinux上都使用符号链接,而不是硬链接?linux上很多地方
使用了链接,是为了组织清晰系统的结构和节省空间吗?
硬连接和软连接的区别, 硬连接和复制的区别?
硬连接记录的是目标的 inode;软连接记录的是目标的 path。
hard link 由于 inode 的缘故,只能在本分区中做 link;soft link 可以做跨分区的 link。硬连接因为记录的是 inode,所以不怕改名,
比如ln aaa bbb, mv aaa ccc, 这时 bbb 仍然可以访问;soft-link 就不行:source 的名字改变后,所有链接到这里的 soft-link 
全部变为 broken。事实上,即使所有指向该 inode 的 hard-link 的文件名都变了,每一个仍然都可以访问。我想这是它最大的优点吧。
硬连接和复制的区别:
几个硬连接=几个名字的同一个房子,这些名字可以相同或不同但地址(i-node)是一样的, 所以硬连接被删除只是把相应名字抹去,只有最
后一个名字被抹去你才会找不到房子;而复制是建造一个一模一样的房子,当然地址(i-node)就不同的了。

6.工作平台中由Glibc提供的动态连接器与Binutils里面的标准连接器有什么区别?
参考章节: 链接器和加载器

7.$LFS/tools 目录的所有者是仅存在于宿主环境中的 lfs 用户。如果保留 $LFS/tools 目录,那么该目录内文件的所有者的 user ID 就
没有对应的账号 ?为什么没有帐户,难道不是LFS?
查看 /etc/password /etc/group  两个文件 分别记录 用户和组的信息
如果用户名和用户ID 组名和组ID 的对应关系分别存在上面两个文件中,那么ls -ls 的时候就可以查看到用户信息,而不再是ID等数字信息

8.系统的环境变量保存在哪个文件?
保存在tty中

9。配置参数脚本时[alias1] [alias2 ...]什么时候用到?
别名的意思
alias ls='ls --color=auto'
/etc/skel/.bashrc:81:    #alias dir='dir --color=auto'
/etc/skel/.bashrc:82:    #alias vdir='vdir --color=auto'
/etc/skel/.bashrc:84:    #alias grep='grep --color=auto'
/etc/skel/.bashrc:85:    #alias fgrep='fgrep --color=auto'
/etc/skel/.bashrc:86:    #alias egrep='egrep --color=auto'
/etc/skel/.bashrc:89:# some more ls aliases
/etc/skel/.bashrc:90:#alias ll='ls -l'
/etc/skel/.bashrc:91:#alias la='ls -A'
/etc/skel/.bashrc:92:#alias l='ls -CF'
alias mohuifu='ls -l'

========================
9. linux 内核的初步理解
4. 编译内核
此处内核编译主要针对驱动组之外的同事
1> 设置工具链
内核的 linux-2.6.28-a1/Makefile 中设定了:
CROSS_COMPILE	?= arm-linux-
所以设置PATH环境变量,保证能找到正确的工具链
假设工具链位于: /usr/local/marvell-arm-linux-4.1.1/ 设置为:
export PATH:=/usr/local/marvell-arm-linux-4.1.1/bin/:$PATH

2> 更改编译选项(网络启动或者本机启动)
内核顶层目录执行:
make menuconfig
General setup  ---> 
  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
    ()    Initramfs source file(s) (NEW) 
如果需要支持网络启动反选  [] Initial RAM filesystem and RAM disk (initramfs/initrd) support
如果需要支持本地启动选中  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
设置 ()    Initramfs source file(s) (NEW) 为 root
拷贝  cupcake 编译结果  out/target/product/littleton/root/  到内核顶层目录

3> 编译
内核顶层目录执行 make zImage
编译好的内核:
arch/arm/boot/zImage


initramfs与initrd
1. initrd是一个单独的文件;initramfs和Linux内核链接在一起(/usr目录下的程序负责生成initramfs文档)。
2. initrd是一个压缩的文件系统映像(可以是ext2等,需要内核的驱动);initramfs是类似tar的cpio压缩文档。
内核中的cpio解压缩代码很小,而且init数据在boot后可以丢弃。
3. initrd运行的程序(initd,不是init)进行部分setup后返回内核;initramfs执行的init程序不返回内核
(如果/init需要向内核传递控制权,可以再次安装在/目录下一个新的root设备并且启动一个新的init程序)。

编译脚本及系统变量
initramfs与initrd的区别
1. initrd是一个单独的文件;initramfs和Linux内核链接在一起(/usr目录下的程序负责生成initramfs文档)。
2. initrd是一个压缩的文件系统映像(可以是ext2等,需要内核的驱动);initramfs是类似tar的cpio压缩文档。
内核中的cpio解压缩代码很小,而且init数据在boot后可以丢弃。
3. initrd运行的程序(initd,不是init)进行部分setup后返回内核;initramfs执行的init程序不返回内核
(如果/init需要向内核传递控制权,可以再次安装在/目录下一个新的root设备并且启动一个新的init程序)。
4. 切换到另一个root设备时,initrd执行pivot_root后,卸载ramdisk;initramfs是rootfs,既不能 
pivot_root,也不能卸载。initramfs会删掉rootfs的所有内容(find -xdev / -exec rm '{}' ';'),
再次安装root到rootfs(cd /newmount; mount --move . /; chroot .),把stdin/sdout/stderr挂在
新的/dev/console上,重新执行init。由于这是一个相当困难的实现过程(包括在使用一个命令之前把它删除),所以
klibc工具包引入一个帮助程序/utils/run_init.c来执行上述过程。其他大部分工具包(包括busybox) 把这个命令
称为"switch_root"。
======================= end ===============
文件:androidlinux基础知识.rar
大小:34KB
下载:下载
阅读(1160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~