免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

修改修改boot.img文件的工具,mkbootfs,mkbootimg,unpackbootimg

 大機(jī)器人 2013-01-08

修改修改boot.img文件的工具,mkbootfs,mkbootimg,unpackbootimg


#編譯mkbootfs,mkbootimg,unpackbootimg
#首先要得到android_system_core的源代碼,從github.com上面下載得到
#其中要編譯的三個(gè)文件分別位于CyanogenMod-android_system_core-***的目錄里面的不同文件夾中。
下面的代碼是經(jīng)過我修改的:

http://pan.baidu.com/share/link?shareid=104897&uk=2265432600

CyanogenMod-...m-core-sn.zip

其中mkbootfs的源代碼位于cpio文件夾中
mkbootimg和unpackbootimg位置mkbootimg文件夾中
#使用的工具是linux系統(tǒng)的gcc
PS:如果需要交叉編譯,就需要下載我制作的交叉編譯器
下面講解一下編譯的過程:
一 講解編譯mkbootfs文件
1.分析Android.mk(此文件位于cpio目錄里面)
目錄路徑如下:
/home/username/CyangenMod-android_system_core-***(其中的*代表的是標(biāo)識(shí)碼)/cpio/Android.mk
使用gedit打開此文件,
得到的內(nèi)容如下:
----------cut here-----------------------
# Copyright 2005 The Android Open Source Project

LOCAL_PATH:= $(call my-dir)    #得到本目錄的位置
include $(CLEAR_VARS)         #其中這句表示聲明編譯的開始。

LOCAL_SRC_FILES := \           #源代碼文件
 mkbootfs.c

LOCAL_MODULE := mkbootfs        #生成的文件名

include $(BUILD_HOST_EXECUTABLE)     #生成在本機(jī)使用的可執(zhí)行文件

$(call dist-for-goals,droid,$(LOCAL_BUILT_MODULE))   #這句就不知道是什么意思了
--------------------------------------------------

2.制作自己使用的makefile
從上面的Android.mk文件中得到如下的信息:
編譯用到的源代碼文件是mkbootfs.c,生成的文件是一個(gè)可執(zhí)行的文件,
沒有加入編譯參數(shù),生成的文件在本機(jī)運(yùn)行。
所以我制作的makefile如下所示:
----------------cut here------------------------
#makefile for arm-mkbootimg
#create by sn

 #arm-linux-androideabi- #這句是我在編譯android版本的mkbootfs用到的。
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
EXEC = arm-mkbootfs
OBJ = mkbootfs.o
SRC = mkbootfs.c
$(EXEC):$(OBJ) ;$(CC) -o $@ $<
$(OBJ):$(SRC) ;$(CC) -fPIC -c -o $@ $<

clean:
 rm -f $(OBJ) $(EXEC)

-------------------------------------------

--------------------------------------------------
3.查看源代碼中的頭文件關(guān)鏈問題。
/*mkbootfs.c */中的頭文件聲明問題如下
------------------cut here-----------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>

#include <stdarg.h>
#include <fcntl.h>

#include <private/android_filesystem_config.h>
--------------------------------------------
為了能讓編譯通過,得修改最后一個(gè)頭文件聲明位置,修改為如下:
---------------
#include "android_filesystem_config.h"  
-------------------------------------
最后要做的是,把CyangenMod-android_system_core-**/include/private/android_filesystem_config.h文件復(fù)制到當(dāng)前的目錄即是CygenMod-android_system_core-**/cpio目錄里面。
4.在終端里面使用make,來編譯生成mkbootfs
5.如果需要交叉編譯的,就把makefile中的
CROSS_COMPILE =  #這句補(bǔ)充完整。

二 編譯mkbootimg和unpackbootimg
1.分析mkbootimg文件夾中的Android.mk文件
-------------------cut here--------------
LOCAL_PATH:= $(call my-dir)  #這句是聲明當(dāng)前的目錄
include $(CLEAR_VARS)

LOCAL_SRC_FILES := mkbootimg.c       #要用到的源代碼是mkbootimg.c
LOCAL_STATIC_LIBRARIES := libmincrypt   #此句聲明要使用的靜態(tài)庫文件是libmincrypt.a

LOCAL_MODULE := mkbootimg

include $(BUILD_HOST_EXECUTABLE)    #上當(dāng)?shù)膬?nèi)容是編譯mkbootimg的命令。

include $(CLEAR_VARS)             #從這里開始到是編譯unpackbootimg的部分
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES := unpackbootimg.c
LOCAL_MODULE := unpackbootimg
include $(BUILD_HOST_EXECUTABLE)      #編譯unpackbootimg的部分

include $(CLEAR_VARS)                   #下面的部分也是編譯mkbootimg和unpackbootimg的,但是加載的庫文件就多了一個(gè)libcutils.so。所以我主要要上面的部分為規(guī)則。
LOCAL_SRC_FILES := mkbootimg.c
LOCAL_STATIC_LIBRARIES := libmincrypt libcutils libc
LOCAL_MODULE := utility_mkbootimg
LOCAL_MODULE_STEM := mkbootimg
LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES
LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_TAGS := eng
include $(BUILD_EXECUTABLE)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := unpackbootimg.c
LOCAL_STATIC_LIBRARIES := libcutils libc
LOCAL_MODULE := utility_unpackbootimg
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE_STEM := unpackbootimg
LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES
LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
LOCAL_FORCE_STATIC_EXECUTABLE := true
include $(BUILD_EXECUTABLE)

$(call dist-for-goals,droid,$(LOCAL_BUILT_MODULE))
---------------------------------------
2.根據(jù)Android.mk文件得要的如下的內(nèi)容,在編譯的過程中都需要加載靜態(tài)庫libmincrypt.a文件。
找了一找系統(tǒng)目錄,沒有發(fā)現(xiàn)這個(gè)文件,再在/CyanogenMod-android_system_core-**/libmincrypt/Android.mk文件中得到了如下的信息:
--------------------cut here------------
# Copyright 2008 The Android Open Source Project
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := libmincrypt              
LOCAL_SRC_FILES := rsa.c sha.c
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := libmincrypt          #還有這句LOCAL_MODULE := libmincrypt
LOCAL_SRC_FILES := rsa.c sha.c
include $(BUILD_HOST_STATIC_LIBRARY)       #生成主機(jī)使用的靜態(tài)庫#include $(BUILD_HOST_STATIC_LIBRARY)


# TODO: drop the hyphen once these are checked in
include $(LOCAL_PATH)/tools/Android.mk

----------------------------------------------
為了編譯這個(gè)mkbootimg和unpackbootimg,首先要編譯得到libmincrypt.a
2.1以下的內(nèi)容是編譯libmincrypt.a的過程:
  從剛剛的libmincrypt/Android.mk可以得到如下的信息:
需要的源代碼文件是:rsa.c sha.c
分析rsa.c和sha.c的源代碼,得到了共同的頭文件聲明如下:
------------------cut here---------------
/*rsa.c or sha.c */
#include "mincrypt/rsa.h"
#include "mincrypt/sha.h"
-----------------------------
在文件的聲明中,得知了,需要用到的頭文件在/include/mincrypt/目錄中
所以需要把/CyanogenMod-android_system_core-***/include/mincrypt/目錄復(fù)制到當(dāng)前的目錄即是/libmincrypt
2.2制作自己的makefile文件
-------------------cut here---------------
#make file build for libmincrypt.a
#create by sn
CROSS_COMPILE =  #arm-linux-androideabi-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
STATIC_LIB = libmincrypt.a
OBJ =rsa.o sha.o
$(STATIC_LIB):$(OBJ);$(AR) -r $(STATIC_LIB) $(OBJ)
rsa.o:rsa.c;$(CC) -c -o $@ $<

sha.o:sha.c;$(CC) -c -o $@ $<


clean:
 rm -f $(STATIC_LIB) $(OBJ)
----------------------------------------

根據(jù)文件關(guān)鏈,寫的makefile如上所示。
在終端里面進(jìn)入當(dāng)前的目錄/libmincrypt
再執(zhí)行make,來編譯生成libmincrypt.a 文件。
把編譯得到的文件復(fù)制到/mkbootimg目錄下面。以備用。
3.在第二步中已經(jīng)得到了libmincrypt.a文件。
下面就開始制作makefile,并編譯mkbootimg,unpackbootimg

-----------------------cut here---------------------
#make for build mkbootimg
#create by sn 2012-5-23 21:14:18
CROSS_COMPILE =  #arm-linux-androideabi-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
LDCFLAGES =
STATIC_LIB = libmincrypt.a
#MKBOOTIMG_TARGET = arm-mkbootimg
MKBOOTIMG_OBJ = mkbootimg.o
MKBOOTIMG_SRC = mkbootimg.c
#UNPACKBOOT_TARGET = arm-unpackbootimg
UNPACKBOOTIMG_OBJ = unpackbootimg.o
UNPACKBOOTIMG_SRC = unpackbootimg.c
all:mkbootimg
mkbootimg:$(MKBOOTIMG_OBJ);$(CC) -o $@ $< $(STATIC_LIB)

$(MKBOOTIMG_OBJ):$(MKBOOTIMG_SRC);$(CC) -c $<
unpackboot:unpackbootimg
unpackbootimg:$(UNPACKBOOTIMG_OBJ);$(CC) -o $@ $< $(STATIC_LIB)
$(UNPACKBOOTIMG_OBJ):$(UNPACKBOOTIMG_SRC);$(CC) -c $<


clean:
 rm -f mkbootimg unpackbootimg $(MKBOOTIMG_OBJ)  $(UNPACKBOOTIMG_OBJ)
-------------------------------------------------
這個(gè)makefile主要是定義了編譯的對象和編譯的方法。
還有編譯的規(guī)則。
在輸入make all
編譯的時(shí)候,得到的文件是mkbootimg
輸入make unpackboot
編譯得到unpackbootimg

二.在同一個(gè)文件夾中編譯所有的文件(mkbootfs,mkbootimg,unpackbootimg)
我選擇的工作目錄是/mkbootimg
1。復(fù)制需要的文件
在../include目錄中復(fù)制mincrypt目錄到當(dāng)前目錄(mkbootimg)
在../libmincrypt目錄中復(fù)制sha.c rsa.c文件到當(dāng)前目錄
在../cpio目錄中復(fù)制mkbootfs.c    #此文件在一中已經(jīng)經(jīng)過修改。
在../include/private目錄中復(fù)制android_filesystem_config.h頭文件到當(dāng)前目錄。
在復(fù)制完成后。當(dāng)前目錄的結(jié)構(gòu)如下:
./mincrypt/sha.h
./mincrypt/rsa.h
./Android.mk
./android_filesystem_config.h
./bootimg.h
./mkbootfs.c
./mkbootimg.c
./unpackbootimg.c
./rsa.c
./sha.c
./unpackbootimg.c
./makefile # 此文件需要自己創(chuàng)建

2.制作自己的makefile
下面是我編寫好的makefile
-----------------------------cut here----------------------------
#make for build mkbootimg
#create by sn 2012-5-23 21:14:18
CROSS_COMPILE =  #arm-linux-androideabi-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
LDCFLAGES =
STATIC_LIB = libmincrypt.a
#MKBOOTIMG_TARGET = arm-mkbootimg
MKBOOTIMG_OBJ = mkbootimg.o
MKBOOTIMG_SRC = mkbootimg.c
#UNPACKBOOT_TARGET = arm-unpackbootimg
UNPACKBOOTIMG_OBJ = unpackbootimg.o
UNPACKBOOTIMG_SRC = unpackbootimg.c
LIBMINCRYPT_OBJ = sha.o rsa.o
SHA_SRC = sha.c
RSA_SRC = rsa.c
MKBOOTFS_OBJ = mkbootfs.o
MKBOOTFS_SRC = mkbootfs.c
all:mkbootimg               #此處定義編譯mkbootimg
mkbootimg:$(MKBOOTIMG_OBJ);$(CC) -o $@ $< $(STATIC_LIB)

$(MKBOOTIMG_OBJ):$(MKBOOTIMG_SRC);$(CC) -c $<

unpackboot:unpackbootimg              #此處定義編譯unpackbootimg
unpackbootimg:$(UNPACKBOOTIMG_OBJ);$(CC) -o $@ $< $(STATIC_LIB)
$(UNPACKBOOTIMG_OBJ):$(UNPACKBOOTIMG_SRC);$(CC) -c $<

lib:libmincrypt.a                     #此處定義編譯libmincrypt.a
libmincrypt.a:$(LIBMINCRYPT_OBJ);$(AR) -r $(STATIC_LIB) $(LIBMINCRYPT_OBJ)
sha.o:$(SHA_SRC);$(CC) -c -fPIC $<
rsa.o:$(RSA_SRC);$(CC) -c -fPIC $<

mkboot:mkbootfs                  #此處定義了編譯mkbootfs
mkbootfs:$(MKBOOTFS_OBJ);$(CC) -o $@ $<
$(MKBOOTFS_OBJ):$(MKBOOTFS_SRC);$(CC) -c $<

clean:                    #此處定義了要清除的文件
 rm -f mkbootfs mkbootimg unpackbootimg $(MKBOOTIMG_OBJ)  $(UNPACKBOOTIMG_OBJ) $(LIBMINCRYPT_OBJ) $(STATIC_LIB) $(MKBOOTFS_OBJ)

-------------------------------------------------
3.編譯
簡單說一說編譯的方法。
因?yàn)檫@個(gè)mkbootimg和unpackbootimg都依賴于libmincrypt.a,
所以在編譯mkbootimg和unpackbootimg之前要先編譯這個(gè)libmicrypt.a
方法如下 :
3.1
先執(zhí)行make lib   #此條命令是生成libmincrypt.a
再執(zhí)行make all #此條命令是生成mkbootimg
再執(zhí)行make unpackboot #此條命令是生成unpackbootimg
再后執(zhí)行的是make mkboot  #此條命令可以在最前執(zhí)行,也可以在最后執(zhí)行。因?yàn)檫@個(gè)mkbootfs沒有依賴于libmincrypt.a
3.2
最后總結(jié)一下就是。
沒有什么是不可能的。
只要肯努力就行了。

下面提供的是我已經(jīng)編譯好的工具:

http://pan.baidu.com/share/link?shareid=104898&uk=2265432600

make-mkboot-tools.rar

下面是編譯后的圖片:綠色表示生成的可執(zhí)行文件。


 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多