當前位置:首頁 » 編程軟體 » lvm編譯

lvm編譯

發布時間: 2023-07-08 10:37:41

1. 如何學習編譯內核

我用的是RedHat9.0, 根據第一貼 "2.4->2.6內核升級指南", 首先需要把必要的軟體包都升級到要求的版本以上, 經過折騰, 有的是直接用rpm -Uvh 或 rpm -ivh, 有的是直接用源代碼編譯, 總算把大部分軟體包都升級了. 有一個軟體包oprofile死活裝不上, 用rpm裝的時候出來這樣的錯誤:
error: Failed dependencies:
libc.so.6(GLIBC_2.3.4) is needed by oprofile-0.8-0.20040121.3
可是我的/lib目錄里明明有
lrwxrwxrwx 1 root root 13 8月 2 10:45 libc.so.6 -> libc-2.3.2.so
(我已經經歷過N次這樣的錯誤了, 這是我非常痛恨rpm的主要原因.)
改用源代碼編譯的時候, make的時候出來這樣的錯誤:
The present kernel configuration has moles disabled.
Type 'make config' and enable loadable mole support.
Then build a kernel with mole support enabled.

TNND, RedHat9預設的內核編譯居然是moles disabled!!!我折騰來折騰去就是想把2.4.20-8的內核升級到2.6.12.4去, 到頭來還得讓我先編譯原來2.4.20-8的內核? 先把這事放一放, oprofile說不定不是很有用的模塊.

接下來順利地把mole-init-tools升上去了. 然而在升級mkinitrd的時候又碰到了致命的問題.
根據說明, 要想升級mkinitrd, 首先要升級lvm2和device-mapper, 用rpm -Uvh升級lvm2的時候出來一大堆的錯誤:
error: Failed dependencies:
libdevmapper.so.1.00 is needed by lvm2-2.00.15-2
libdevmapper.so.1.00(Base) is needed by lvm2-2.00.15-2
libselinux.so.1 is needed by lvm2-2.00.15-2
lvm < 1.0.3-19 conflicts with lvm2-2.00.15-2
看來要先裝device-mapper再裝lvm2, 另外lvm與lvm2沖突, 要先卸載lvm.
那就卸載lvm吧, NND, lvm is needed by (installed) mkinitrd-3.4.42-1
顧不得了, 用rpm -e -nodeps卸載. 不過現在還是先把device-mapper裝好, 再收拾lvm2.

會過頭來, 用rpm升級device-mapper, 結果出來
error: Failed dependencies:
libselinux.so.1 is needed by device-mapper-1.00.14-3
查了一下, 機器上卻是沒有libselinux.so.1, 在網上盪了一個rpm軟體包, 結果又是這樣一個錯誤,
error: Failed dependencies:
libc.so.6(GLIBC_2.3.4) is needed by libselinux-1.11.4-1

我不知道我機器里的libc.so.6發了什麼豬瘟, 看來是因為我機器里的libc.so.6-->libc-2.3.2.so不是GLIBC_2.3.4.

只好再到網上去盪了一個glibc的軟體包, 用rpm -Uvh升級的時候, 好了, 出來一大堆沖突

package glibc-32bit-9-200508050455 is intended for a x86_64 architecture file /lib/i686/libc.so.6 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/i686/libm.so.6 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/i686/libpthread.so.0 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/ld-linux.so.2 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/libBrokenLocale.so.1 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9

2. linux內核模塊如何開始和結束

GRLB 載入了內核之後,內核首先會再進行二次系統的自檢,而不一定使用 BIOS 檢測的硬體信息。這時內核終於開始替代 BIOS 接管Linux的啟動過程了。

內核完成再次系統自檢之後,開始採用動態的方式載入每個硬體的模塊,這個動態模塊大家可以想像成硬體的驅動(默認 Linux 硬體的驅動是不需要手工安裝的,如果是重要的功能,則會直接編譯到內核當中;如果是非重要的功能,比如硬體驅動會編譯為模塊,則在需要時由內核調用。不過,如果沒有被內核硬體,要想驅動,就需要手工安裝個硬體的硬塊了。具體的安裝方法會在後續章節中介紹)。

那麼,Linux 的內核到底放在了哪裡呢?當然是 /boot 的啟動目錄中了,我們來看看這個目錄下的內容吧。

[root@localhost ~]#ls /boot/
config-2.6.32-279.el6.i686
#內核的配置文件,內核編譯時選擇的功能與模塊
efi
#可擴展固件介面,為英特爾為全新PC固件的體系結構、介面和服務提出的建議標准
grub
#啟動引導程GTUB的數據目錄
initramfe-2.6.32-279.el6.i686.img
#虛擬文件系統(CentOS 6.x 中用initramfs替代了initrd,但功能是一樣的)
lost+found
故boot分區的備份目錄
symvers-2_6.32-279.el6.i686.gz
#模塊符號信息
System.map-2.6.32-279.el6.i686
#內核功能和內存地址的對應列表
vmlinuz-2.6.32-279.el6.i686
#用於啟動的Linux內核。這個文件是一個壓縮的內核鏡像


我們已經知道,Linux 會把不重要的功能編譯成內核模塊,在需要時再調用,從而保證了內核不會過大。在多數 Linux 中,都會把硬體的驅動程序編譯為模塊, 這些模塊保存在 /lib/moles/ 目錄中。常見的 USB、SATA 和 SCSI 等硬碟設備的驅動,還有一些特殊的文件系統(如 LVM、RAID 等)的驅動,都是以模塊的方式來保存的。

如果 Linux 安裝在 IDE 硬碟之上,並且採用的是默認的 ext3/4 文件系統,那麼內核啟動後載入根分區和模塊的載入都沒有什麼問題,系統會順利啟動。但是如果 Linux 安裝在 SCSI 硬碟之上,或者採用的是 LVM 文件系統,那麼內核(內核載入入內存是啟動引導程序 GRUB 調用的,並不存在硬碟驅動不識別的問題)在載入根目錄之前是需要載入 SCSI 硬碟或 LVM 文件系統的驅動的。

SCSI 硬碟和 LVM 文件系統的驅動都放在硬碟的 /lib/moles/ 目錄中,既然內核沒有辦法識別 SCSI 硬碟或 LVM 文件系統,那怎麼可能讀取 /lib/moles/ 目錄中的驅動呢?Linux 給出的解決辦法是使用 initramfs 這個虛擬文件系統來處理這個問題。

initramfe虛擬文件系統

CentOS 6.x 中使用 initramfs 虛擬文件系統取代了 CentOS 5.x 中的 initrd RAM Disk。它們的作用類似,可以通過啟動引導程序載入到內存中,然後會解壓縮並在內存中模擬成一個根目錄,並且這個模擬的文件系統能夠提供一個可執行程序,通過該程序來載入啟動過程中所需的內核模塊,比如 USB、SATA. SCSI 硬碟的驅動和 LVM、RAID 文件系統的驅動。

也就是說,通過 initramfs 虛擬文件系統在內存中模擬出一個根目錄,然後在這個模擬根目錄中載入 SCSI 等硬體的驅動,就可以載入真正的根目錄了,之後才能調用 Linux 的第一個進程 /sbin/init。

Initramfs 虛擬文件系統主要有以下優點:

  • initramfs 隨著其中數據的増減自動増減容量。

  • 在 initramfs 和頁面緩存之間沒有重復數據。

  • initramfs 重復利用了 Linux caching 的代碼,因此幾乎沒有増加內核尺寸,而 caching 的代碼已經經過良好測試,所以 initramfs 的代碼質量也有保證。

  • 不需要額外的文件系統驅動。


  • 其實大家只需要知道 initramfs 是為了在內核中建立一個模擬根目錄,這個模擬根目錄是為了可以調用 USB、SATA、SCSI、LVM、RAID 等硬碟介面或文件系統的驅動模塊,載入了驅動模塊後才可以載入真正的系統根目錄。我們可以通過示意圖 1 來表示這個過程。


  • [root@localhost~]#mkdir/tmp/initramfs
    #建立測試目錄
    [root@localhost~]#cp/boot/
    initramfs-2.6.32-279.el6.i686.img/tmp/initramfs/
    #復制initramfs文件
    [root@localhost~]#cd/tmp/initramfs/
    [root@localhostinitramfs]#file
    initramfs-2.6.32-279.el6.i686.img
    initramfe-2.6.32-279.el6.i686.img:gzipcompressed
    data,fromUnix,lastmodified:
    WedApr1021:49:342013,maxcompression
    #查看文件類型,發現這個文件是一個使用gzip命令打包的壓縮包
    [root@localhostinitramfs]#mvinitramfs-2.6.32-279.el6.i686.imginitramfs-2.6.32-279.el6.i686.img.gz
    #修改文件的擴展名為.gz
    [root@localhostinitramfs]#gunzip
    initramfs-2.6.32-279.el6.i686.img.gz
    #解壓縮
    [root@localhostinitramfs]#ls
    initramfs-2.6.32-279.el6.i686.img
    [root@localhostinitramfs]#file
    initramfs-2.6.32-279.el6.i686.img
    initramfe-2.6.32-279.el6.i686.img:ASCIIcpioarchive(SVR4withnoCRC)
    #查看文件類型,使用cpio命令的壓縮文件
    [root@localhostinitramfs]#cpio-ivc<initramfs-2.6.32-279.el6.i686.img
    #解壓縮
    [root@localhostinitramfs]#ll
    總用量34512
    drwxr-xr-x.2rootroot40964月2412:10bin
    drwxr-xr-x.2rootroot40964月2412:10cmdline
    drwxr-xr-x.3rootroot40964月2412:10dev
    -rw-r--r--.1rootroot194月2412:10dracut-004-283.el6
    drwxr-xr-x.2rootroot40964月2412:10emergency
    drwxr-xr-x.7rootroot40964月2412:10etc
    -rwxr-xr-x.1rootroot89624月2412:10init
    drwxr-xr-x.2rootroot40964月2412:10initqueue
    drwxr-xr-x.2rootroot40964月2412:10initqueue-finished
    drwxr-xr-x.2rootroot40964月2412:10initqueue-settled
    drwxr-xr-x.2rootroot40964月2412:10
    initqueue-timeout
    -rw-r--r--.1rootroot352353284月2412:09initramfs-2.6.32-279.el6.i686.img
    drwxr-xr-x.9rootroot40964月2412:10lib
    …省略部分輸出…


    #這就是initramfs虛擬文件系統中的內容,和根目錄是不是很像

關機或者某些進程停止,對應的內核模塊就會結束。更多知識請網路《Linux就該這么學》

3. android 怎麼編譯so文件

android NDK編譯多個so文件

android編譯系統的makefile文件Android.mk寫法如下

(1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。由於一般情況下

Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:

LOCAL_PATH:=$(call my-dir)

上面的語句的意思是將LOCAL_PATH變數定義成本文件所在目錄路徑。

(2)Android.mk中可以定義多個編譯模塊,每個編譯模塊都是以include $(CLEAR_VARS)開始

以include $(BUILD_XXX)結束。

include $(CLEAR_VARS)

CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,

如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。

include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫

include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。

include $(BUILD_EXECUTABLE)表示編譯成可執行程序

(3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS) 模塊一

ifeq ($(AUDIO_POLICY_TEST),true)

ENABLE_AUDIO_DUMP := true

endif

LOCAL_SRC_FILES:= \

AudioHardwareGeneric.cpp \

AudioHardwareStub.cpp \

AudioHardwareInterface.cpp

ifeq ($(ENABLE_AUDIO_DUMP),true)

LOCAL_SRC_FILES += AudioDumpInterface.cpp

LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP

endif

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_CFLAGS += -DGENERIC_AUDIO

endif

LOCAL_MODULE:= libaudiointerface

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_SRC_FILES += A2dpAudioInterface.cpp

LOCAL_SHARED_LIBRARIES += liba2dp

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_C_INCLUDES += $(call include-path-for, bluez)

endif

include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫

include $(CLEAR_VARS) 模塊二

LOCAL_SRC_FILES:= \

AudioPolicyManagerBase.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libmedia

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudiopolicybase

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_A2DP

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫

include $(CLEAR_VARS) 模塊三

LOCAL_SRC_FILES:= \

AudioFlinger.cpp \

AudioMixer.cpp.arm \

AudioResampler.cpp.arm \

AudioResamplerSinc.cpp.arm \

AudioResamplerCubic.cpp.arm \

AudioPolicyService.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase

LOCAL_CFLAGS += -DGENERIC_AUDIO

else

LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy

endif

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudioflinger

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_SHARED_LIBRARIES += liba2dp

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

ifeq ($(TARGET_SIMULATOR),true)

ifeq ($(HOST_OS),linux)

LOCAL_LDLIBS += -lrt -lpthread

endif

endif

ifeq ($(BOARD_USE_LVMX),true)

LOCAL_CFLAGS += -DLVMX

LOCAL_C_INCLUDES += vendor/nxp

LOCAL_STATIC_LIBRARIES += liblifevibes

LOCAL_SHARED_LIBRARIES += liblvmxservice

# LOCAL_SHARED_LIBRARIES += liblvmxipc

endif

include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫

(4)編譯一個應用程序(APK)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory-->直譯(建立在java子目錄中的所有Java文件)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build-->直譯(創建APK的名稱)

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK-->直譯(告訴它來建立一個APK)

include $(BUILD_PACKAGE)

(5)編譯一個依賴於靜態Java庫(static.jar)的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# List of static libraries to include in the package

LOCAL_STATIC_JAVA_LIBRARIES := static-library

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK

include $(BUILD_PACKAGE)

(6)編譯一個需要用平台的key簽名的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := platform

# Tell it to build an APK

include $(BUILD_PACKAGE)

(7)編譯一個需要用特定key前面的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := vendor/example/certs/app

# Tell it to build an APK

include $(BUILD_PACKAGE)

(8)添加一個預編譯應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Mole name should match apk name to be installed.

LOCAL_MODULE := LocalMoleName

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

(9)添加一個靜態JAVA庫

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Any libraries that this library depends on

LOCAL_JAVA_LIBRARIES := android.test.runner

# The name of the jar file to create

LOCAL_MODULE := sample

# Build a static jar file.

include $(BUILD_STATIC_JAVA_LIBRARY)

(10)Android.mk的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:

LOCAL_AAPT_FLAGS

LOCAL_ACP_UNAVAILABLE

LOCAL_ADDITIONAL_JAVA_DIR

LOCAL_AIDL_INCLUDES

LOCAL_ALLOW_UNDEFINED_SYMBOLS

LOCAL_ARM_MODE

LOCAL_ASFLAGS

LOCAL_ASSET_DIR

LOCAL_ASSET_FILES 在Android.mk文件中編譯應用程序(BUILD_PACKAGE)時設置此變數,表示資源文件,

通常會定義成LOCAL_ASSET_FILES += $(call find-subdir-assets)

LOCAL_BUILT_MODULE_STEM

LOCAL_C_INCLUDES 額外的C/C++編譯頭文件路徑,用LOCAL_PATH表示本文件所在目錄

舉例如下:

LOCAL_C_INCLUDES += extlibs/zlib-1.2.3

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_CC 指定C編譯器

LOCAL_CERTIFICATE 簽名認證

LOCAL_CFLAGS 為C/C++編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1

LOCAL_CLASSPATH

LOCAL_COMPRESS_MODULE_SYMBOLS

LOCAL_COPY_HEADERS install應用程序時需要復制的頭文件,必須同時定義LOCAL_COPY_HEADERS_TO

LOCAL_COPY_HEADERS_TO install應用程序時復制頭文件的目的路徑

LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp為文件後綴,你可以通過LOCAL_CPP_EXTENSION指定C++文件後綴名

如:LOCAL_CPP_EXTENSION := .cc

注意統一模塊中C++文件後綴必須保持一致。

LOCAL_CPPFLAGS 傳遞額外的標志給C++編譯器,如:LOCAL_CPPFLAGS += -ffriend-injection

LOCAL_CXX 指定C++編譯器

LOCAL_DX_FLAGS

LOCAL_EXPORT_PACKAGE_RESOURCES

LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),則設置LOCAL_FORCE_STATIC_EXECUTABLE:=true

目前只有libc有靜態庫形式,這個只有文件系統中/sbin目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常

文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。

LOCAL_GENERATED_SOURCES

LOCAL_INSTRUMENTATION_FOR

LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME

LOCAL_INTERMEDIATE_SOURCES

LOCAL_INTERMEDIATE_TARGETS

LOCAL_IS_HOST_MODULE

LOCAL_JAR_MANIFEST

LOCAL_JARJAR_RULES

LOCAL_JAVA_LIBRARIES 編譯java應用程序和庫的時候指定包含的java類庫,目前有core和framework兩種

多數情況下定義成:LOCAL_JAVA_LIBRARIES := core framework

注意LOCAL_JAVA_LIBRARIES不是必須的,而且編譯APK時不允許定義(系統會自動添加)

LOCAL_JAVA_RESOURCE_DIRS

LOCAL_JAVA_RESOURCE_FILES

LOCAL_JNI_SHARED_LIBRARIES

LOCAL_LDFLAGS 傳遞額外的參數給連接器(務必注意參數的順序)

LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以"-lxxx"格式,舉例:

LOCAL_LDLIBS += -lcurses -lpthread

LOCAL_LDLIBS += -Wl,-z,origin

LOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)

LOCAL_MODULE_PATH 生成模塊的路徑

LOCAL_MODULE_STEM

LOCAL_MODULE_TAGS 生成模塊的標記

LOCAL_NO_DEFAULT_COMPILER_FLAGS

LOCAL_NO_EMMA_COMPILE

LOCAL_NO_EMMA_INSTRUMENT

LOCAL_NO_STANDARD_LIBRARIES

LOCAL_OVERRIDES_PACKAGES

LOCAL_PACKAGE_NAME APK應用程序的名稱

LOCAL_POST_PROCESS_COMMAND

LOCAL_PREBUILT_EXECUTABLES 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用,指定需要復制的可執行文件

LOCAL_PREBUILT_JAVA_LIBRARIES

LOCAL_PREBUILT_LIBS 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用, 指定需要復制的庫.

LOCAL_PREBUILT_OBJ_FILES

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES

LOCAL_PRELINK_MODULE 是否需要預連接處理(默認需要,用來做動態庫優化)

LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)

LOCAL_RESOURCE_DIR

LOCAL_SDK_VERSION

LOCAL_SHARED_LIBRARIES 可鏈接動態庫

LOCAL_SRC_FILES 編譯源文件

LOCAL_STATIC_JAVA_LIBRARIES

LOCAL_STATIC_LIBRARIES 可鏈接靜態庫

LOCAL_UNINSTALLABLE_MODULE

LOCAL_UNSTRIPPED_PATH

LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫(這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼)

LOCAL_YACCFLAGS

OVERRIDE_BUILT_MODULE_PATH

4. linux 重新編譯kernel後不能正常啟動

從提示信息看,你的Linux系統使用LVM(邏輯卷管理),所以你編譯內核應該將lvm編譯進去,否則就找不到文件系統了。

熱點內容
紅帆oa伺服器地址查詢 發布:2025-02-07 14:31:41 瀏覽:657
文本框腳本圖片 發布:2025-02-07 14:23:28 瀏覽:231
少兒編程c語言 發布:2025-02-07 14:22:50 瀏覽:218
一階低通濾波器c語言 發布:2025-02-07 14:22:37 瀏覽:852
電腦的東西為什麼粘貼不到伺服器 發布:2025-02-07 14:21:04 瀏覽:196
手機脫模解壓視頻 發布:2025-02-07 14:20:18 瀏覽:473
密碼多少密碼多少密碼多少密碼 發布:2025-02-07 14:07:30 瀏覽:857
我的世界啟動器電腦伺服器 發布:2025-02-07 14:07:27 瀏覽:484
愛加密深圳科技有限 發布:2025-02-07 14:07:26 瀏覽:87
c語言密碼星號 發布:2025-02-07 14:07:24 瀏覽:801