两显示器 博易大师怎么下载 怎么设置

ramdisk.img及boot.img的生成过程
我的图书馆
ramdisk.img及boot.img的生成过程
ramdisk.img
ramdisk.img是组成boot.img的重要部分,从/build/core/Makefile中可以看到ramdisk.img的生成该过程.
    # the ramdisk
    INTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \& $(ALL_PREBUILT) \ $(ALL_COPIED_HEADERS) \
&    $(ALL_GENERATED_SOURCES)&& $(ALL_DEFAULT_INSTALLED_MODULES))
    BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
    INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
    $(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
    ...
&    $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) & $@
    ramdisk.img是用mkbootfs工具从out/target/product/tcc8900/root目录制作得到,
所以,需要把注意力转移到out/target/product/tcc8900/root目录及其内容是如何生成的这一主题上来。
其实,ALL_PREBUILT包含了root目录中的大多数内容,另外的ALL_COPIED_HEADERS,ALL_GENERATED_SOURCES
暂时不予以考虑。以下列表列出了与out/target/product/tcc8900/root生成相关的文件:
    /init.goldfish.rc-------------------&Android/system/core/rootdir/etc/init.goldfish.rc
    /init.rc&&&&&&&& -------------------&device/telechips/tcc92xx-common/init.rc
如果device/telechips/tcc92xx-common/init.rc不才存在,将使用Android/system/core/rootdir/etc/init.rc文件
    /sbin(create)--------------------------------&Android/system/core/rootdir/Android.mk
    /dev(create)---------------------------------&Android/system/core/rootdir/Android.mk
    /proc(create)--------------------------------&Android/system/core/rootdir/Android.mk
    /sys(create)---------------------------------&Android/system/core/rootdir/Android.mk
    /system(create)------------------------------&Android/system/core/rootdir/Android.mk
    /data(create)--------------------------------&Android/system/core/rootdir/Android.mk
    /sbin/adbd(compile)--------------------------&Android/system/core/adb/Android.mk
    /init(compile)-------------------------------&Android/system/core/init/Android.mk
    /sbin/timetest(compile)----------------------&Android/system/core/extras/timeinfo/Android.mk
    /lib/modules/tcc92x_nand.ko(copy)------------&Android/hardware/telechips/nand/Makefile
    /lib/modules/ufsd.ko(copy)-------------------&Android/telechips/tcc92xx-common/Android.mk
    /lib/modules/viqe.ko(copy)-------------------&Android/telechips/tcc92xx-common/Android.mk
至于其他的诸如/config , /cache, /nand,/inand,/mnt,/mnt/nand,/sata,/scisi,/app-cache等目录都在init.rc中被创建。
http://blog.csdn/hnzzh1986/article/details/7056782
在制作android烧写镜像时,boot.img是一个很重要的文件
boot.img在一般情况下包括了ramdisk、kernel,& KERNEL_CMDLINE, FLASH_PAGE_SIZE四个部分。
从Android/build/core/Makefile文件中可以看到boot.img的生成过程.
INSTALLED_BOOTIMAGE_TARGET:=$(PRODUCT_OUT)/boot.img& 定义输出文件名称
INTERNAL_BOOTIMAGE_ARGS:=...\
& &--kernel $(INSTALLED_KERNEL_TARGET)&&&\&其实INSTALL_KERNEL_TARGET就是kernel下的Image文件
&& --ramdisk $(INSTALLED_RAMDISK_TARGET) \ramdisk.img是mkbootfs工具用out/.../tcc8900/root目录生成,并做了压缩
ifdef BOARD_KERNEL_CMDLINE
&& INTERNAL_BOOTIMAGE_ARGS+= --cmdline "$(BOARD_KERNEL_CMDLINE)"
tcc89xx的device/telechips/tcc8900/BoardConfig.mk包含了device/telechips/tcc92xx-common目录中的
BoardConfigCommon.mk文件,tcc8900的BOARD_KERNEL_CMDLINE就被定义在这个BoardConfigCommon.mk中
ifdef BOARD_KERNEL_BASE
& INTERNAL_BOOTIMAGE_ARGS+= --base& "$(BOARD_KERNEL_BASE)"
和BOARD_KERNEL_CMDLINE一样,该宏也被定义在tcc9xx-common/BoardConfigCommon.mk中
ifdef BOARD_FLASH_PAGE_SIZE
& INTERNAL_BOOTIMAGE_ARGS+= --pagesize "$BOARD_FLASH_PAGE_SIZE"
BOARD_FLASH_PAGE_SIZE可以在device/telechips/tcc8900/BoardConfig.mk文件中找到其定义
$(INSTALLED_BOOTIMAGE_TARGET):$(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
&&& $(hide)& $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS)& --output $@& 使用mkbootimg工具生成最后boot.img
&其中INSTALLED_KERNEL_TARGET在Android/build/target/board/Android.mk内被定义:
INSTALLED_KERNEL_TARGET:=$(PRODUCT_OUT)/kernel& 就是kernel源码编译后的Image文件
在boot.img生成过程中用到的诸如MKBOOTIMG,MKBOOTFS,MINIGZIP工具在build/core/config.mk中定义:
MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)mkbootimg$(HOST_OUT_EXECUTABLE_SUFFIX)
TA的最新馆藏android build 过程 (ramdisk.img、sytem.img、userdata.img)和 启动过程简单分析
首先下载下android并编译,网上的资料特别多,可以参考一下这个:
/kf/141.html
按照上面网址的步骤,将android内核编译成功,如果不出意外的话,在out/target/product/generic目录下会生成三个文件,分别是ramdisk.img、sytem.img、userdata.img。这三个文件到底有什么用呢?下面开始分析一下。
首先在linux终端下使用命令file ramdisk.img,打印出如下字符ramdisk.img: gzip compressed data, from Unix,可以看出,它是一个gzip压缩的格式,下面对其进行解压,使用fedora自带的工具进行解压,或者使用gunzip进行解压(可能需要将扩展名改为.gz),可以看到解压出一个新的ramdisk.img,这个ramdisk.img是使用cpio压缩的,可以使用cpio命令对其进行解压,cpio &i &F ramdisk.img,解压后可以看到生成了一些文件夹和文件。看到这些文件就会明白,它和root目录下的内容完全一样。说明了ramdisk.img其实是对root目录的打包和压缩。
下面分析system.img的来源。在build/core/Makefile里的629行,可以看到这么一段文字
# The installed image, which may be optimized or unoptimized.
INSTALLED_SYSTEMIMAGE := $(PRODUCT_OUT)/system.img
从这里可以看出,应该会在$(PRODUCT_OUT)目录下生成system.img
再继续往下看,在662行有一个copy-file-to-target,这实现了将system.img从一个中间目录复制到/generic目录。
BUILD_SYSTEM的定义在636行。
这里的system.img不是/generic目录下面我们看到的那个system.img,而是另一个中间目录下的,但是是同一个文件。一开始看到的复制就是把out /target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates目录下面的system.img复制到/generic目录下。
现在,知道了system.img的来历,然后要分析它是一个什么东西,里面包含什么??
Makefile line624
$(BUILT_SYSTEMIMAGE_UNOPT): $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_MKUSERFS)
$(call build-systemimage-target,$@)
这里调用了build-systemimg-target Makefile line605
ifeq ($(TARGET_USERIMAGES_USE_EXT2),true)
## generate an ext2 image
# $(1): output file
define build-systemimage-target
@echo &Target system fs image: $(1)&
$(call build-userimage-ext2-target,$(TARGET_OUT),$(1),system,)
else # TARGET_USERIMAGES_USE_EXT2 != true
## generate a yaffs2 image
# $(1): output file
define build-systemimage-target
@echo &Target system fs image: $(1)&
@mkdir -p $(dir $(1))
*$(hide) $(MKYAFFS2) -f $(TARGET_OUT) $(1)*
endif # TARGET_USERIMAGES_USE_EXT2
找不到TARGET_USERIMAGES_USE_EXT2的定义!!!不过从上面的分析可以推断出应该是yaffs2文件系统。
其中MKYAFFS2:(core/config.mk line161)
MKYAFFS2 := $(HOST_OUT_EXECUTABLES)/mkyaffs2image$(HOST_EXECUTABLE_SUFFIX)
定义MKYAFFS2是目录/media/disk/mydroid /out/host/linux-x86/bin下的一个可执行文件mkyaffs2image,运行这个程序可得到如下信息:
lzj@lzj-laptop:/media/disk/mydroid/out/host/linux-x86/bin$ ./mkyaffs2image
mkyaffs2image: image building tool for YAFFS2 built Nov 13 2009
usage: mkyaffs2image [-f] dir image_file [convert]
-f fix file stat (mods, user, group) for device
dir the directory tree to be converted
image_file the output file to hold the image
'convert' produce a big-endian image from a little-endian machine
得知这个程序可以生成yaffs2的文件系统映像。并且也清楚了上面*$(hide) $(MKYAFFS2) -f $(TARGET_OUT) $(1)*的功能,把TARGET_OUT目录转变成yaffs2格式并输出成/media/disk/mydroid/out/target /product/generic/obj/PACKAGING/systemimage_unopt_intermediates /system.img(也就是我们最终在/generic目录下看到的那个system.img)。
到现在已经差不多知道system.img的产生过程,要弄清楚system.img里面的内容,就要分析TARGET_OUT目录的内容了。 (想用mount把system.img挂载到linux下面看看里面什么东西,却不支持yaffs和yaffs2文件系统!!!)
下一步:分析TARGET_OUT 在build/core/envsetup.sh文件(line205)中找到了TARGET_OUT的定义:
TARGET_OUT := $(PRODUCT_OUT)/system
也就是/media/disk/mydroid/out/target /product/generic目录下的system目录。
lzj@lzj-laptop:/media/disk/mydroid/out/target/product/generic/system$ tree -L 1
|-- build.prop
|-- framework
现在一切都明白了,我们最终看到的system.img文件是该目录下的system目录的一个映像,类似于linux的根文件系统的映像,放着android的应用程序,配置文件,字体等。
Userdata.img来来自于data目录,默认里面是没有文件的。
Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中。可以分析一下它的代码,看看在其中到底做了一些什么样的初始化任务,它的源文件在system/core/init/init.c中。
它会调用到init.rc初始化文件,这个文件在out/target/product/generic/root下,我们在启动以后,会发现根目录是只读属性的,而且sdcard的owner是system,就是在这个文件中做了些手脚,可以将它改过来,实现根目录的可读写。
通过分析这几个文件,还可以发现,android启动时首先加载ramdisk.img镜像,并挂载到/目录下,并进行了一系列的初始化动作,包括创建各种需要的目录,初始化console,开启服务等。System.img是在init.rc中指定一些脚本命令,通过init.c进行解析并挂载到根目录下的/system目录下的
摘自 andy_android的专栏Android(22)
ramdisk.img:android根文件系统,在android编译系统生成的out/target/product/root目录中
./init.trout.rc
./default.prop 保存一些调试参数,对于开发者相当重要
./init.rc&&&&&&&& 一些启动参数
./init.goldfish.rc
./sbin&&&&&&&&&&&&
./sbin/adbd
./system& system.img挂载点
./data&&&&& userdata.img挂载点
userdata.img 保存用户、应用信息。
/data/app& 所有安装后的app会移至此处,apk被拆成dex和apk,dex为目标文件,apk为资源包
/data/data 应用程序内部存储信息,sharepreference、database,etc
system.img 包含整个android系统
system/app&&&&&&&&&&&&&&&&&& android出厂内置应用在此,同时,在这里的app可以获得一些特别的权限。
system/framework&&&&&&&& android框架在此,不宜乱动,开发者可以使用adb push + 拔电池开关机可以快速验证问题。(前提是eng版本)
Special App:
SystemUI.apk 状态栏藏在里面。
framework-res.apk包含整个系统res文件夹 including 系统UI、一些配置参数、theme、style、animation
recovery.img 按power键+音量上键(android默认)可以进去,可以执行T卡升级,format,backup userdata,restore userdata
结构:不知道
boot.img 包含一个linux kernel (maybe named as zImage)和一个ramdisk。img文件结构在源码system/core/mkbootimg/bootimg.h中声明
uboot.img android启动时第一个加载的镜像,初始化硬件和基本输入出系统。
所以一般flash到android设备中的img一般是这几个:uboot.img,boot.img,recovery.img,userdata.img,system.img
system提取以及打包方法:
提取:adb pull system $dst_dir
即可将system.img解包提取到本地,
貌似GB的版本system.img用的文件系统为yaffs,可以使用mkyaffs(android自带) 生成system.img 解包可以使用网友自制的unyaffs解包。
ICS版本system.img使用的是ext4文件系统,可以使用android自带的mk_ext4fs工具打包system.img,目前网上对于ICS版本的讨论较少,并没有找到解包工具
ramdisk提取以及打包方法:
提取:由于ramdisk各个设备商打包方法略有不同,所以不推荐直接从设备中提取,最好还是找一个官方ramdisk,分析下结构。再做提取修改打包动作。
打包(android默认):mkbootimgfs $root_dir | gzip & ramdisk.img
因此ramdisk.img是一个gzip的压缩包,里面有个ramdisk的镜像
由于不同厂商打包方式有所不同,比如MTK会把gzip的压缩包外面再加一个文件头(虽然不知道是什么,不过好像很厉害的样子),很多厂商也会加个头。不过可以根据gzip的文件格式从加壳的ramdisk中将gzip提取出来,修改后,再把gzip放回去。
因此ramdisk的修改会比较麻烦。改得不好,则无法开机。
boot.img打包解包方法:
解包:可以根据bootimg.h文件头格式,可以自己编个程序解包,也可以使用已有的工具进行解析:
split-bootimg.pl是一个国外网友自制的boot.img解包工具。解包后生成$bootimg_name-kernel.img 和 $bootimg_name-ramdisk.gz
打包:mkbootimg --kernel $kernelimg --ramdisk $ramdiskimg --kernel_base $kernel_base --page_size $page_size --cmd_line $cmd -o $out_image
--kernel --ramdisk 指定kernel ramdisk镜像
--kernel_base --page_size 【可选】指定kernel基址和页大小,如果有源码可以查看BoardConfig.mk
--cmd_line 指定一条命令,可以在开机的时候执行。
-o 输出镜像名字
boot.img一般不要轻易换,很容易造成不开机,一定要注意备份。。
不开机的几种原因:
kernel_base错了,uboot找不到kernel的引导程序。
ramdisk解包错误,无法建立文件系统
android开机过程:
上电,加载uboot,初始化硬件
加载boot.img,加载linux内核,建立文件系统。
根据启动模式,决定是正常启动、recovery_mode factory_mode。
加载recovery.img或者system.img
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43793次
排名:千里之外
原创:32篇
转载:73篇
(1)(6)(1)(3)(21)(34)(25)(16)进阶教程-如何拆包打包 boot.img 提取内核和 ramdisk_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
进阶教程-如何拆包打包 boot.img 提取内核和 ramdisk
上传于|0|0|暂无简介
你可能喜欢新解压打包android 根文件系统 ramdisk.img
1. ramdisk.img文件gzip压缩文件, 所以要用gunzip命令解压缩. 但是gunzip需要默认后缀名.gz才可以正常解压, 不然会被忽略对待.
(源文件类型) ramdisk.img: gzip compressed data, from Unix
2. 解压后名字会自动去掉.gz后缀,并重命名为ramdisk.img, 这时候文件类型为
ramdisk.img: ASCII cpio archive (SVR4 with no CRC)
3. 这时候就可以用cpio命令从ramdisk.img里面解压出跟文件的文件了, 所以建议新建一个目录来做
进入到目录里面
cpio -i -F ../ramdisk.img
OK, 成功解压, 可以随便更改定制自己的跟文件系统了, init.rc随便你改吧
4. 定制好了之后开始重新打包了
cpio -i -t -F ../ramdisk.img & list
cpio -o -H newc -O new.img & list
好了,打包好新的ramdisk.img了, 名字为new.img, 但是这时候还不能直接跑起来, 为什么呢?&
看看文件类型吧
new.img: ASCII cpio archive (SVR4 with no CRC)
跟上面解压后的ramdisk.img一样, 所以这时候还差一步,就是重新用gzip 压缩
gzip new.img
文件类型为
new.img.gz: gzip compressed data, was &new.img&, from Unix, last modified: Mon Dec 24 10:59:51 2012
然后重新命名为ramdisk.img
mv new.img.gz ramdisk.img
5. 好了, 有板子的就重新烧录ramdisk.img文件, 没板子的也可以运行模拟器了.
emulator -ramdisk ./ramdisk.img -system ./system.img -data ./userdata.img -sdcard (可选)
整理一下命令吧
cp ramdisk.img ramdisk.img.gz
gunzip ramdisk.img.gz
cpio -i -F ../ramdisk.img
(解压完毕, 定制自己的根文件系统)
cpio -i -t -F ../ramdisk.img & list
cpio -o -H newc -O new.img & list
gzip new.img
mv new.img.gz ramdisk.img
cp ramdisk.img ../ramdisk.img (覆盖原来的ramdisk, 可选)
emulator -ramdisk ./ramdisk.img -system ./system.img -data ./userdata.img

我要回帖

更多关于 博易大师均线设置 的文章

 

随机推荐