Ⅰ Android操作系統是基於linux Kernel是什麼意思
kernel(內核):是操作系統最基本的部分,是一個操作系統的核心。是基於硬體的第版一層軟體擴充,權提供操作系統的最基本的功能,是操作系統工作的基礎,它負責管理系統的進程、內存、內核體系結構、設備驅動程序、文件和網路系統,決定著系統的性能和穩定。
Linux內核:顧名思義即Linux系統的核心,是Linux操作系統最基本的部分,所謂內核通俗的講,就是負責硬體管理,為應用程序招供操作硬體的介面。
Android(安卓): 本質上是一個基於 Linux 內核上面運行的 java 虛擬機,實際上就是一個解釋程序。它相當於一個應用程序,應用程序要運行需要一個平台,這個平台是Linux內核。這就是Android操作系統是基於Linux Kernel的意思。
Ⅱ 如何更新linuxkernel
在更新核心之前,可以執行uname -r或uname -a檢查系統中目前使用的Kernel版本。
編譯核心可按下面步驟來:
Step1 備份舊版Kernel
#cd /usr/src
# mv linux linux.old
#mv /boot/vmlinuz vmlinuz.old
Step2 取得Kernel源程序代碼
我以Kernel2.6.15為例來完成。
將linux-2.6.15.tar.gz復制到/usr/src/這個目錄下。
Step3 將Kernel解壓縮
在/usr/src/這個目錄下解壓縮,會看到linux/這個目錄。
tar zxvf linux-2.6.15.tar.gz
Step4 make mrproper
在/usr/src/linux/下執行 make mrproper
Step5 make config
在/usr/src/linux/下執行 make config,這是編譯整個核心的所在,是最復雜的地方。你需要一個一個選擇要編譯的功能。
/usr/src/linux/# make config
Step6 make dep
在上一步設置完配置文件後,就可以開始編譯核心了。
/usr/src/linux/# make dep
Step7 make clean
清除以前編譯出來的舊的系統核心與舊的driver
/usr/src/linux/# make clean
Step8 make zImage
製作系統核心文件。
/usr/src/linux/# make zImage (注意 I 為大寫,其餘均為小寫)
Step9 取得Linux核心文件zImage
編譯成功後,真正的系統核心文件Kernel Image放在
/usr/src/linux/arch/i386/boot/ zImage
應將此目錄的zImage復制到/boot/vmlinuz
#cd /usr/src/linux/arch/i386/boot
#cp zImage /boot/vmlinuz-2.6.15
#cd /boot
# ln ?s /boot/vmlinuz-2.6.15 /boot/vmlinuz
Step10 編譯系統模塊
如果在make config中設置將某些功能或硬體驅動程序編譯成模塊moles,且想安裝這些模塊,執行下面步驟。
/usr/src/linux/# make moles (編譯模塊)
/usr/src/linux/# make moles_install (安裝模塊)
編譯成功的模塊會被放置在/lib/moles/2.6.15/這個目錄,若以後想載入模塊就執行
#insmod /lib/moles/2.6.15/xxx.o (xxx.o是模塊名稱)
# modprobe /lib/moles/2.6.15/xxx.o
Step11 更新System.map
# cp /usr/src/linux/System.map /boot/System.map-2.6.15
# cd /boot
# ln ?s System.map-2.6.15 System.map
Step12 編輯lilo.conf
編輯lilo.conf,使開機能選用新Kernel或舊Kernel啟動,然後執行 lilo ?v ?v ?v,將編輯好的lilo.conf設置寫入系統核心文件,最後執行sync;sync;sync將在內存中的數據寫回硬碟,再執行shutdown ?r now 或reboot重新啟動。
Ⅲ 怎麼查看linux的內核符號表
在內核中通過/proc/kallsyms獲得符號的地址
Linux內核符號表/proc/kallsyms的形成過程
./scripts/kallsyms.c負責生成System.map
./kernel/kallsyms.c負責生成/proc/kallsyms
./scripts/kallsyms.c解析vmlinux(.tmp_vmlinux)生成kallsyms.S(.tmp_kallsyms.S),然後內核編譯過程中將kallsyms.S(內核符號表)編入內核鏡像uImage
內核啟動後./kernel/kallsyms.c解析uImage形成/proc/kallsyms
/proc/kallsyms包含了內核中的函數符號(包括沒有EXPORT_SYMBOL)、全局變數(用EXPORT_SYMBOL導出的全局變數)
如何將內核中的函數、全局變數、靜態變數都導出到/proc/kallsyms
查看內核 使用 uname -a
Ⅳ linux kernel map怎麼理解
(1)I/O映射方式(I/O-mapped)
典型地,如X86處理器為外設專門實現了一個單獨的地址空間,稱為"I/O地址空間"或者"I/O埠空間",CPU通過專門的I/O指令(如X86的IN和OUT指令)來訪問這一空間中的地址單元。
(2)內存映射方式(Memory-mapped)
RISC指令系統的CPU(如ARM、PowerPC等)通常只實現一個物理地址空間,外設I/O埠成為內存的一部分。此時,CPU可以象訪問一個內存單元那樣訪問外設I/O埠,而不需要設立專門的外設I/O指令。
Ⅳ 獲取Linux內核未導出符號的幾種方式
只有在內核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL導出的符號才能在內核模塊中直接使用。然而,內核並沒有導出所有的符號。例如,在3.8.0的內核中,do_page_fault就沒有被導出。 而我的內核模塊中需要使用do_page_fault,那麼有那些方法呢?這些方法分別有什麼優劣呢? 下面以do_page_fault為例,一一進行分析: 修改內核,添加EXPORT_SYMBOL(do_page_fault)或EXPORT_SYMBOL_GPL(do_page_fault)。 這種方法適用於可以修改內核的情形。在可以修改內核的情況下,這是最簡單的方式。 使用kallsyms_lookup_name讀取 kallsyms_lookup_name本身也是一個內核符號,如果這個符號被導出了,那麼就可以在內核模塊中調用kallsyms_lookup_name("do_page_fault")來獲得do_page_fault的符號地址。 這種方法的局限性在於kallsyms_lookup_name本身不一定被導出。 讀取/boot/System.map-,再使用內核模塊參數傳入內核模塊 System.map-是編譯內核時產生的,它裡面記錄了編譯時內核符號的地址。如果能夠保證當前使用的內核與System.map-是一一對應的,那麼從System.map-中讀出的符號地址就是正確的。其中,kernel-version可以通過'uname -r'獲得。 但是這種方法也有局限性,在模塊運行的時候,System.map-文件不一定存在,即使存在也不能保證與當前內核是正確對應的。 讀取/proc/kallsyms,再使用內核模塊參數傳入內核模塊 /proc/kallsyms是一個特殊的文件,它並不是存儲在磁碟上的文件。這個文件只有被讀取的時候,才會由內核產生內容。因為這些內容是內核動態生成的,所以可以保證其中讀到的地址是正確的,不會有System.map-的問題。 需要注意的是,從內核2.6.37開始,普通用戶是沒有辦法從/proc/kallsyms中讀到正確的值。在某些版本中,該文件為空。在較新的版本中,該文件中所有符號的地址均為0(除非/porc/sys/kernel/kptr_restrict 的值被設為0)。但是root用戶是可以從/proc/kallsyms中讀到正確的值的。好在載入模塊也需要root許可權,可以在載入模塊時用腳本獲取符號的地址。