在嵌入式系統中,BootLoader 是用來初始化硬件,加載內核,傳遞參數。因為嵌入式系統的硬件環境各不相同,所以嵌入式系統的BootLoader 也各不相同,其中比較通用的是U-Boot,它支持不同的體系結構,如ARM,PowerPC,X86,MIPS 等。本文著重介BootLoader與內核之間參數傳遞這一基本功能。本文的硬件平臺是基于AT91RM9200 處理器系統,軟件平臺是Linux-2.6.19.2 內核。內核映像文件為zImage。
1. 系統硬件平臺簡介
AT91RM9200 處理器,它是由Atmel 公司基于ARM920T 內核的微處理器,帶有內存管理單元,CPU 時鐘最高可達240MHz,它具有豐富的標準接口,EBI 接口,內部集成了靜態存儲控制器(SMC),SDRAM 控制器,Burst Flash 控制器。有關處理器的說明請參考AT91RM9200 的數據手冊。本系統SDRAM(64MB)地址為:0x20000000, NorFlash(8MB)的地址為:0x10000000[1]。
2. BootLoader 設計和實現
內核源代碼目錄樹下的documentation/arm/booting[2]文檔規定了基于ARM 體系結構BootLoader 的基本功能。本系統BootLoader 除了完成這些基本的功能外,還結合自身硬件的特點加入了代碼搬運等功能。
BootLoader 的流程是:系統上電復位后,首先從NorFlash 開始運行(由處理器BMS 引腳連接決定),因為處理器此時的0 地址就是NorFlash 的首地址(0x10000000),BootLoader就是被燒寫在這個位置,AT91RM9200 處理器能夠映射的地址范圍只有0x0000
0000—0x001f ffff。 BootLoader 執行的第一步就是將自身代碼從NorFlash 中搬運到處理器內部的RAM 中(0x00200000),然后將0 地址映射到內部RAM,并且跳轉到內部RAM 的相應地址處繼續執行。進入內部RAM 后才進入真正的硬件初始化階段,這個階段初始化的各種控制器都是內核所必須的,包括:PMC, EBI, SMC, SDRAM, USART 等。接著就是創建內核參數鏈表(Tagged list),創建完鏈表就是搬運事先燒寫在NorFlash 中的內核映像和根文件系統映像到SDRAM,根據內核對BootLoader 的基本要求關閉中斷,MMU 和數據Cache,并且配置r0=0, r1=0x0000 00fb 或者0x00000106(根據內核中linux/arch/arm/tools/mach-types[2]
規定的機器編號),r2=0x20000100(BootLoader 傳遞給內核參數鏈表的物理地址),在ARM體系結構中,這個地址在同一種處理器的機器描述符(machine_desc)中都是默認的,所以在這里可以不指定。最后BootLoader 直接跳轉到SDRAM 的內核處執行。
3. 內核參數鏈表
BootLoader 可以通過兩種方法傳遞參數給內核, 一種是舊的參數結構方式(parameter_struct),主要是2.6 之前的內核使用的方式。另外一種就是現在的2.6 內核在用的參數鏈表 (tagged list) 方式。這些參數主要包括,系統的根設備標志,頁面大小,內存的起始地址和大小,RAMDISK 的起始地址和大小,壓縮的RAMDISK 根文件系統的起始地址和大小,內核命令參數等[3][4][5]。
內核參數鏈表的格式和說明可以從內核源代碼目錄樹中的 include/asm-arm/setup.h[2]中找到,參數鏈表必須以ATAG_CORE 開始,以ATAG_NONE 結束。這里的ATAG_CORE,ATAG_NONE 是各個參數的標記,本身是一個32 位值,例如:ATAG_CORE=0x54410001。
其它的參數標記還包括: ATAG_MEM32 , ATAG_INITRD , ATAG_RAMDISK ,ATAG_COMDLINE 等。每個參數標記就代表一個參數結構體,由各個參數結構體構成了參數鏈表。參數結構體的定義如下:
struct tag
{
struct tag_header hdr;
union {
struct tag_core core;
struct tag_mem32 mem;
struct tag_videotext videotext;
struct tag_ramdisk ramdisk;
struct tag_initrd initrd;
struct tag_serialnr serialnr;
struct tag_revision revision;
struct tag_videolfb videolfb;
struct tag_cmdline cmdline;
struct tag_acorn acorn;
struct tag_memclk memclk;
} u;
};
參數結構體包括兩個部分,一個是 tag_header 結構體,一個是u 聯合體。
tag_header 結構體的定義如下:
struct tag_header
{
u32 size;
u32 tag;
};
其中 size:表示整個tag 結構體的大小(用字的個數來表示,而不是字節的個數),等于tag_header 的大小加上u 聯合體的大小,例如,參數結構體ATAG_CORE 的
size=(sizeof(tag->tag_header)+sizeof(tag->u.core))>>2,一般通過函數 tag_size(struct * tag_xxx)來獲得每個參數結構體的size。其中tag:表示整個tag 結構體的標記,如:ATAG_CORE等。
聯合體u 包括了所有可選擇的內核參數類型,包括:tag_core, tag_mem32,tag_ramdisk等。參數結構體之間的遍歷是通過函數tag_next(struct * tag)來實現的。本系統參數鏈表包括的結構體有: ATAG_CORE , ATAG_MEM, ATAG_RAMDISK, ATAG_INITRD32 ,ATAG_CMDLINE,ATAG_END。在整個參數鏈表中除了參數結構體ATAG_CORE 和ATAG_END 的位置固定以外,其他參數結構體的順序是任意的。本BootLoader 所傳遞的參數鏈表如下:第一個內核參數結構體,標記為ATAG_CORE,參數類型為tag_core。每個參數類型的定義請參考源代碼文件。
tag_array 初始化為指向參數鏈表的第一個結構體的指針。
tag_array->hdr.tag=ATAG_CORE;
tag_array->hdr.size=tag_size(tag_core);
tag_array->u.core.flags=1;
tag_array->u.core.pagesize=4096;
tag_array->u.core.rootdev=0x00100000;
tag_array=tag_next(tag_array);
tag_array->hdr.tag=ATAG_MEM;
tag_array->hdr.size=tag_size(tag_mem32);
tag_array->u.mem.size=0x04000000;
tag_array->u.mem.start=0x20000000;
tag_array=tag_next(tag_array);
……
tag_array->hdr.tag=ATAG_NONE;
tag_array->hdr.size=0;
tag_array=tag_next(tag_array);
最后將內核參數鏈表復制到內核默認的物理地址0x20000100 處。這樣參數鏈表就建好了。
4. 內核接收參數
下面從基于ARM體系結構的zImage 映像啟動來分析Linux 內核是怎樣接收BootLoader傳遞過來的內核參數,zImage 啟動過程如下圖所示。
(圖有時間再畫)
在文件 arch/arm/boot/compressed/head.S[2]中 start 為zImage 的起始點,部分代碼如下:
start:
mov r7, r1
mov r8, r2
…...
mov r0, r4
mov r3, r7
bl decompress_kernel
b call_kernel
call_kernel:
……
mov r0, #0
mov r1, r7
mov r2, r8
mov pc, r4
首先將BootLoader 傳遞過來的r1(機器編號)、r2(參數鏈表的物理地址)的值保存到r7、r8 中,再將r7 作為參數傳遞給解壓函數decompress_kernel()。在解壓函數中,再將r7 傳遞給全局變量__machine_arch_type。在跳到內核(vmlinux)入口之前再將r7,r8 還原到r1,r2 中。
在文件 arch/arm/kernel/head.S[2]中,內核(vmlinux)入口的部分代碼如下:
stext:
mrc p15, 0, r9, c0, c0
bl __lookup_processor_type
………
bl __lookup_machine_type
首先從處理器內部特殊寄存器(CP15)中獲得ARM 內核的類型,從處理器內核描述符(proc_info_list)表(__proc_info_begin—__proc_info_end)中查詢有無此ARM 內核的類型,如果無就出錯退出。處理器內核描述符定義在 include/asm-arm/procinfo.h[2]中,具體的函數實現在 arch/arm/mm/proc-xxx.S[2]中,在編譯連接過程中將各種處理器內核描述符組合成表。接著從機器描述符(machine_desc)表(__mach_info_begin—__mach_info_end)中查詢有無r1 寄存器指定的機器編號,如果沒有就出錯退出。機器編號mach_type_xxx 在arch/arm/tools/mach-types[2]文件中說明,每個機器描述符中包括一個唯一的機器編號,機器描述符的定義在 include/asm-arm/mach/arch.h[2]中,具體實現在 arch/arm/mach-xxxx[2]文件夾中,在編譯連接過程中將基于同一種處理器的不同機器描述符組合成表。例如,基于AT91RM9200 處理器的各種機器描述符可以參考 arch/arm/mach-at91rm9200/board-xxx.c[2],機器編號為262 的機器描述符如下所示:
MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
/* Maintainer: SAN People/Atmel */
.phys_io = AT91_BASE_SYS,
.io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
.boot_params = AT91_SDRAM_BASE + 0x100,
.timer = &at91rm9200_timer,
.map_io = dk_map_io,
.init_irq = dk_init_irq,
.init_machine = dk_board_init,
MACHINE_END
最后就是打開MMU,并跳轉到 init/main.c[2]的start_kernel(初始化系統。在 init/main.c[2] 中,函數start_kernel()的部分代碼如下:
{
……
setup_arch();
……
}
在 arch/arm/kernel/setup.c[2]中,函數setup_arch()的部分代碼如下:
{
……
setup_processor();
mdesc=setup_machine(machine_arch_type);
……
parse_tags(tags);
……
}
setup_processor()函數從處理器內核描述符表中找到匹配的描述符,并初始化一些處理器變量。setup_machine()用機器編號(在解壓函數decompress_kernel 中被賦值)作為參數返回機器描述符。從機器描述符中獲得內核參數的物理地址,賦值給tags 變量。然后調用parse_tags()函數分析內核參數鏈表,把各個參數值傳遞給全局變量。這樣內核就收到了BootLoader 傳遞的參數。
5. 參數傳遞的驗證和測試
參數傳遞的結果可以通過內核啟動的打印信息來驗證。
Machine: Atmel AT91RM9200-DK
……
Kernel command line: console=ttyS0,115200 root=/dev/ram rw init=/linuxrc
……
Memory: 64MB = 64MB total
……
checking if image is initramfs...it isn't (no cpio magic); looks like an initrd
Freeing initrd memory: 1024K
……
RAMDISK: Compressed image found at block 0
一個完備的BootLoader 是一個很復雜的工程,本文所介紹的只是嵌入式系統的BootLoaer 基本功能。任何一個BootLoader 都離不開這個基本功能,內核只有接收這些參數才能正確地啟動,同時也為內核的移植和調試奠定了良好的基礎。
BootLoader與Linux內核的參數傳遞
相關推薦
Linux內核中常用的C語言技巧有哪些呢?
Linux內核采用的是GCC編譯器,GCC編譯器除了支持ANSI C,還支持GNU C。在Linux內核中,許多地方都使用了GNU C語言的擴展特性
2023-03-20 09:04:56
738
![](https://skin.elecfans.com/images/2021-soft/eye.png)
Linux內核的作用
Linux操作系統是當今世界上最為廣泛使用的開源操作系統之一,內核則是一個操作系統的核心和靈魂所在。對于一名Linux驅動開發者來說,了解Linux內核的運行機制和Linux內核提供的一些關鍵功能(如虛擬內存管理、進程管理、文件系統、網絡協議棧等)都是我們日常工作和學習的重點。
2023-07-06 11:46:41
1046
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/8C/1D/wKgZomSmOXyAAv8XAAAZkOn9Nuo631.png)
linux驅動模塊參數傳遞方式
在嵌入式linux應用開發中,可以給main()函數傳遞參數,這樣應用程序就能知道最初的控制參數是什么,當然也可以選擇不向應用程序傳遞參數。在驅動開發中,會使用到insmod命令來加載一個驅動模塊,這時候我們也可以使用insmod命令向驅動模塊傳遞參數。
2023-08-09 09:10:22
246
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/8F/D4/wKgaomTS5-KAJBCtAAATkKWqTAQ418.png)
linux內核系統調用之參數傳遞
與普通函數一樣,系統調用通常需要一些輸入/輸出參數,這些參數可能包括實際值(即數字)、用戶模式進程地址空間中的變量地址,甚至包括指向用戶模式函數指針的數據結構的地址(參見第11章“信號相關的系統調用”部分)。
2023-12-20 09:32:12
323
![](https://skin.elecfans.com/images/2021-soft/eye.png)
Linux內核中信號的傳遞過程
前面我們已經介紹了內核注意到信號的到來,調用相關函數更新進程描述符以便進程接收處理信號。但是,如果目標進程此時沒有運行,內核則推遲傳遞信號。現在,我們看看內核如何處理進程掛起的信號。
2024-01-17 09:51:05
391
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/BC/E5/wKgZomWnMuSAfULgAAAmwFO6mKQ005.png)
Linux內核地址映射模型與Linux內核高端內存詳解
Linux 操作系統和驅動程序運行在內核空間,應用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數據,因為Linux使用的虛擬內存機制,用戶空間的數據可能被換出,當內核空間使用用戶空間指針時,對應
2018-05-08 10:33:19
3299
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A7/46/wKgZomUMQ36ANQMWAAATFoFa5Ok330.png)
Bootloader的概念和用途------轉載
處理器上電執行第一條指令的位置。 接下來分配參數區,這里可以作為Bootloader的參數保存區域。 再下來內核映像區。Bootloader引導Linux內核,就是要從這個地方把內核映像解壓到RAM
2016-05-09 23:13:02
Linux內核之系統調用
Linux內核之系統調用1. 應用程序通過API而不是直接調用系統調用來編程;2. getpid()系統調用示例:asmlinkage long sys_getpid(void){ return
2012-02-21 10:49:32
Linux內核啟動過程和Bootloader(總述)
供給 Linux 內核。Linux 內核在啟動過程中會根據該處理器類型調用相應的初始化程序(4)設置 Linux啟動參數 Bootloader在執行過程中必須設置和初始化 Linux 的內核啟動參數。目前傳遞
2012-08-18 17:35:24
Linux內核模塊程序結構
。 (4)模塊參數(可選)。 模塊參數是模塊被加載的時候可以被傳遞給它的值,它本身對應模塊內部的全局變量。 (5)模塊導出符號(可選)。 內核模塊可以導出符號(symbol,對應于函數或變量),這樣其他模塊可以使用本模塊中的變量或函數。 (6)模塊作者等信息聲明(可選)。
2017-05-27 09:36:50
Linux內核的最主要目的是什么
從上圖可以知道:① 組成:嵌入式Linux系統 = bootloader + linux內核 + 根文件系統(里面含有APP)。② bootloader:它的目的是啟動內核,去哪讀內核?讀到哪里?去
2021-12-17 07:09:09
Linux操作系統分層相關資料分享
過程BootLoarder是什么Linux操作系統分層一個嵌入式Linux系統從軟件的角度看通常可以分為四個層次:引導加載程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。Linux內核。特定于嵌入式板子的定制內核以及內核的啟動參數。文件系統。包括根文件系統和建立于F
2021-11-04 07:38:49
Linux系統移植篇3:STM32MP1微處理器之設備樹簡介
會加載內核并將控制權轉交給內核,此外,還需要把上述的三個參數信息傳遞給kernel,以便kernel可以有較大的靈活性。在linux kernel中,Device Tree的設計目標就是如此。
2021-08-26 11:08:21
Rk3399串口配置參數的傳遞過程如何去實現呢
的,通過該參數告訴內核使用哪個串口以及波特率作為調試串口,bootargs可以在設備樹(dts)下配置,chosen里有屬性項bootargs,啟動linux時,內核會使用chosen中定義
2022-05-24 10:15:58
TI AM335x_linux-3.14.43內核移植筆記
Device Tree牽涉面比較廣,即增加了新的用于描述設備硬件信息的文本格式(即.dts文件),又增加了編譯這一文本的工具,同時Bootloader也需要支持將編譯后的Device Tree傳遞給Linux
2018-06-04 15:49:15
【OK210試用體驗】bootloader啟動linux內核
由bootloader加載根文件系統到內存。3.3. linux啟動參數bootloader可以給linux內核傳遞啟動參數以控制其行為。linux內核啟動參數位置并沒有需要特別注意的地方,一般默認
2016-01-10 15:57:45
為什么畢業班自己寫Bootloader啟動內核時會失敗?
畢業班自己寫Bootloader,啟動內核時出現:確定內核和文件系統沒有問題,用之前的U-boot可以正常啟動,自己寫的Bootloader不行Copy kernel from
2019-09-04 05:45:01
為什么需要進行bootloader移植?
(firmware)中的boot程序(可選),和BootLoader兩大部分。Linux內核特定于嵌入式平臺的定制內核文件系統包括了系統命令和應用程序。BootLoader概念BootLoade...
2021-12-17 07:43:58
學習嵌入式Linux-JZ2440-初識Bootloader
。有的Bootloader還具有網絡功能。Bootloader引導內核,它和內核也需要有參數的交互,不過因為二者不能夠同時運行,所以它們的交互是單向的,只能夠由Bootloader將各類參數傳遞給內核
2015-05-13 15:43:52
嵌入式Linux系統組成部分
嵌入式Linux系統軟件由三部分組成:BootLoader(uboot)裸板軟件,初始化硬件+從閃存加載內核到內存并且啟動內核+給內核傳遞啟動參數,告訴內核根文件系統rootfs在什么地方。(上電...
2021-12-14 06:24:34
嵌入式開發中BootLoader/內核和根文件系統之間的關系是什么
理解嵌入式開發中BootLoader、內核和根文件系統之間的關系一般來說,為了使開發板成功運行linux系統,我們需要完成以下三個方面的開發工作:bootloader(啟動裝載)kernel(內核
2021-11-08 07:27:56
怎樣通過BootLoader加載Linux鏡像
在前面的實驗中,我們都是直接運行Linux內核。而在實際的嵌入式系統中都是通過BootLoader加載Linux鏡像,然后再去運行。嵌入式BootLoader功能類似PC中的BIOS,用以檢測硬件
2021-11-05 08:30:59
自己寫的bootloader啟動內核出現下面的情況該怎么辦?
跟著畢業班 自己寫bootloader 視頻;板子是JZ2440 V3;寫bootloader,編譯沒問題,啟動內核時出現(NAND和NOR都燒寫過,無論從NAND還是NOR啟動問題一樣,里面原有
2019-10-10 01:40:26
自己動手寫Bootloader(基于jz2440)
;thekernel(0, 362, 0x30000100);Bootloader與內核的交互是單向的,Bootloader將各類參數傳給內核,由于它們不能同時運行,傳遞的辦法只有一個:Bootloader將
2017-08-05 20:53:38
請問內核參數在nand flash中的地址該怎么確定?
u-boot傳遞給內核的參數,在nand flash中的位置怎么確定的啊?燒寫的時候把u-boot放在nand flash的0~0x60000,但內核中把內核參數定位在0x40000~0x60000范圍,這個范圍是內核確定的嗎?u-boot中好像沒有關于內核參數在nand flash中位置的代碼啊
2019-07-22 05:45:07
請問是不是參數傳遞出錯了?
kernelUncompressing Linux...uImage和u-boot都是用光盤里提供的補丁文件編譯出來,而且之前都沒問題.怎么用自己寫bootloader那一課的代碼卻卡死了呢?請問大家覺得是不是參數傳遞出錯了??
2019-06-17 05:45:01
適用于Linux的PSoC USBHID Bootloader
你好我正在編程通過USB編程PSoC。我在網站上找到了基于Windows的Bootloader主機程序。但是,我在Linux上工作。有基于Linux的Bootloader主機程序嗎?謝謝美好的一周奧
2018-09-07 11:49:43
高效學習Linux內核——內核模塊編譯
情況下,內核模塊應遵循GPL 兼容許可權。Linux2.6 內核模塊最常見的是以MODULE_LICENSE(“Dual BSD/GPL”)語句聲明模塊采用BSD/GPL 雙LICENSE4)模塊參數
2021-09-24 09:11:03
Linux的內核教程
本章學習目標掌握LINUX內核版本的含義理解并掌握進程的概念掌握管道的概念及實現了解內核的數據結構了解LINUX內核的算法掌握LINUX內核升級的方法
2009-04-10 16:59:19
0
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux內核解讀入門
Linux內核解讀入門關鍵詞:Linux, 內核,源代碼一.核心源程序的文件組織: 1. Linux核心源程序通常都安裝在/usr/src/linux下,而且它有一個非常簡單的編號約定:任何偶數的核
2010-01-16 14:40:10
103
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于MIPS64的嵌入式Linux Bootloader的移
結合OCTEON3010(MIPS64)的U-boot移植經驗,介紹了嵌入式Linux Bootloader的工作原理及功能,設計一個基于MIPS體系的Bootloader模型。對OCTEON系列的MIPS處理器Bootloader的設計有一定參考價值和指導
2010-12-17 16:30:35
56
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux發明者推穩定升級版2.6.13 Linux內核
Linux內核的下一個穩定的升級版本已經發布了。Linux發明者李納斯·托沃茲(Linus Torvalds)用電子郵件向Linux內核郵件列表發布了升級版本的Linux內核。
2006-03-13 13:07:54
824
![](https://skin.elecfans.com/images/2021-soft/eye.png)
《深入Linux內核架構》 莫爾勒著
電子發燒友為您提供了免費下載,《深入Linux內核架構》一書討論了Linux內核的概念、結構和實現。內核對一致和非一致內存訪問系統使用相同的數據結構。 Linux 操作系統的源代碼復雜
2011-07-10 11:24:17
0
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Linux 2.6內核Makefile分析
由于Linux的獨特優勢,使越來越多的企業和科研機構把目光轉向Linux的開發和研究上。目前Linux最新的穩定內核版本為2.6.17,但是當今絕大部分對于Linux Makefile的介紹文章都是
2017-09-18 19:09:09
0
![](https://skin.elecfans.com/images/2021-soft/load.png)
java方法參數傳遞簡析
問:當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞? 答:是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作為
2017-09-27 17:03:29
0
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux內核配置系統詳解
隨著 Linux 操作系統的廣泛應用,特別是 Linux 在嵌入式領域的發展,越來越多的人開始投身到 Linux 內核級的開發中。面對日益龐大的 Linux 內核源代碼,開發者在完成自己的內核代碼
2017-11-01 15:45:54
3
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux內核移植相關代碼解析
及講解的不夠清楚之處,請各位網友指正,這里提前謝過。本文分以下部分進行介紹: 1. Bootloader及內核解壓 2. 內核啟動方式介紹 3. 內核啟動地址的確定 4. arch/armnommu
2017-11-07 11:29:40
0
![](https://skin.elecfans.com/images/2021-soft/load.png)
linux內核啟動參數設置
name”是關鍵字,內核用它來識別應該把“關鍵字”后面的值傳遞給誰,也就是如何處理這個值,是傳遞給處理進程還是作為環境變量或者拋給“init”。值的個數限制為10,你可以通過再次使用該關鍵字使用超過10個的參數。
2017-11-14 16:50:48
3866
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/E4/wKgZomUMQRmAOwQ5AAAHyAyHWjE380.png)
Linux內核提權攻擊研究
提權攻擊是針對Linux系統的一種重要攻擊手段。根據提權攻擊所利用的漏洞類型,一般可將其分為應用層提權攻擊和內核提權攻擊。現有的防御技術已經能夠防御基本的應用層提權攻擊,但是并不能完全防御內核
2017-11-24 11:46:03
0
![](https://skin.elecfans.com/images/2021-soft/load.png)
U-boot傳遞RAM和Linux kernel讀取RAM參數的解析
U-boot會給Linux Kernel傳遞很多參數,如:串口,RAM,videofb等。而Linux kernel也會讀取和處理這些參數。兩者之間通過struct tag來傳遞參數。U-boot
2018-02-06 08:24:53
5580
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/45/D1/pIYBAFp49vyANgCIAAEp7qYWC2E525.png)
基于AT91RM9200 處理器系統中BootLoader與內核的參數傳遞
本文著重介BootLoader與內核之間 參數傳遞 這一基本功能。本文的硬件平臺是基于AT91RM9200 處理器系統,軟件平臺是Linux-2.6.19.2 內核。內核映像文件為zImage。
2018-03-28 09:04:00
1724
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/4E/4C/o4YBAFq67YuAOTQMAABj1A2cKy8853.png)
函數參數傳遞的原理
參數傳遞,是在程序運行過程中,實際參數就會將參數值傳遞給相應的形式參數,然后在函數中實現對數據處理和返回的過程,方法有按值傳遞參數,按地址傳遞參數和按數組傳遞參數。
2018-03-02 11:41:50
6871
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/46/4B/o4YBAFqYx9OAAmN_AAExxfYB1XU215.png)
Bootloader中LCD硬件初始化和軟件驅動程序設計
Android系統在正常啟動中,刷屏功能一般在內核中執行,而Bootloader的任務應該是執行硬件初始化,并盡快跳轉到Linux內核。在Bootloader啟動過程中使能一個顯示驅動,實現刷屏功能
2018-03-07 14:05:06
8513
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/46/80/o4YBAFqfgkGAUOp0AABCaEc-Ej8159.jpg)
Linux內核與Android的關系
Android雖然建立在Linux內核之上,但是他對內核進行了一些擴展,增加了一些驅動。比如Binder,loger等等驅動。可以拿Android內核代碼和其Baseline版本進行對比。可以看到Android對Linux內核的所有擴展。
2018-09-09 09:10:00
4369
![](https://skin.elecfans.com/images/2021-soft/eye.png)
基于嵌入式Linux系統的Bootloader模型在MIPS64上的移植設計淺析
Linux具備良好的裁剪性和移植性,并且開源、資源豐富,已成為嵌入式系統的開發熱點。一個完整的嵌入式Linux系通通常包括Bootloader、內核、文件系統三部分,目標板上電后由
2018-09-12 16:13:32
771
![](https://skin.elecfans.com/images/2021-soft/eye.png)
嵌入式教程之Bootloader的詳細資料說明
,使得Linux 內核可以在系統主存中跑起來,并讓系統符合Linux內核啟動的必備條件,必須要有一個先于內核運行的程序,他就是所謂的引導加載程序:Bootloader。
2018-12-11 13:59:57
5
![](https://skin.elecfans.com/images/2021-soft/load.png)
移植Bootloader的過程總結資料說明
linux系統上電后啟動過程:---啟動引導加載程序bootloader(一些CPU在運行bootloader之前,會先運行一段固化的程序)。
---》啟動內核
---》掛載根文件系統
其中
2018-12-11 17:11:27
9
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux教程之如何進行Bootloader的編寫詳細驅動學習資料匯總
Bootloader 把外部flash 中的內核代碼讀入內存(需要讀flash 的驅動,初始化時鐘,上電的時候只有12M,關看門狗之類的操作),并啟動內核(跳轉到內核的內存地址,并需要傳遞一些參數到給內核,讓內核知道內存大的大小,根文件地址在哪里等)。-----這只是啟動內核,高級的還可以燒寫內核。
2018-12-13 13:53:46
7
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux內核源碼分析--內核啟動命令行的傳遞過程
內核的啟動參數其實不僅僅包含在了cmdline中,cmdline不過是bootloader傳遞給內核的信息中的一部分。bootloader和內核的通信方式根據構架的不同而異。
2019-05-05 15:28:13
1537
![](https://skin.elecfans.com/images/2021-soft/eye.png)
你了解u-boot與linux內核間的參數傳遞過程?
U-boot會給Linux Kernel傳遞很多參數,如:串口,RAM,videofb、MAC地址等。而Linux kernel也會讀取和處理這些參數。兩者之間通過struct tag來傳遞參數
2019-05-13 10:00:45
1415
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/91/F5/pIYBAFzYzxmAUDe8AAKA9U6nVcE814.png)
用戶與內核空間數據交換的方式之一:內核啟動參數
Linux 提供了一種通過 bootloader 向其傳輸啟動參數的功能,內核開發者可以通過這種方式來向內核傳輸數據,從而控制內核啟動行為。
2019-05-14 15:42:19
407
![](https://skin.elecfans.com/images/2021-soft/eye.png)
Linux bootloader 編寫方法
通過對 linux引導協議進行分析,詳細闡述了如何編寫一個可以在 i386 機器上引導 2.4.20內核的基本的bootloader。1.概述 linux運行在保護模式下,但是當機器啟動復位的時候
2019-04-02 14:39:01
284
![](https://skin.elecfans.com/images/2021-soft/eye.png)
谷歌Android設備內核引入主線Linux內核難嗎?
Android是基于Linux內核的操作系統,但是,運行在Android設備上的內核其實與Google選擇的LTS版本Linux內核有很大不同。
2019-11-22 10:41:42
2793
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/AE/42/o4YBAF3XSoyAaOW0AAHnnK_bHs0923.png)
Linux內核創建者回應用戶,不會推薦使用ZFS On Linux
Linux內核創建者Linus Torvalds最近回應 Linux內核調度器存在問題的文章引發了大家的關注,在同一個帖子里,他還回復了一名用戶抱怨Linux內核最近破壞了內核源碼樹外ZFS模塊的評論。
2020-01-10 10:32:43
2363
![](https://skin.elecfans.com/images/2021-soft/eye.png)
linux內核是什么_linux內核學習路線
Linux內核是一個操作系統(OS)內核,本質上定義為類Unix。它用于不同的操作系統,主要是以不同的Linux發行版的形式。Linux內核是第一個真正完整且突出的免費和開源軟件示例。Linux 內核是第一個真正完整且突出的免費和開源軟件示例,促使其廣泛采用并得到了數千名開發人員的貢獻。
2020-09-16 15:49:50
2323
![](https://skin.elecfans.com/images/2021-soft/eye.png)
最硬核的Linux內核文章
來源 :頭條號@Linux學習教程,冰凌塊兒 01 前言 本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux內核,能看懂Linux
2020-10-19 17:46:08
1860
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/CA/4E/o4YBAF-NXzGAM7OiAAFTQFO35nY110.png)
快速理解什么是Linux內核以及Linux內核的內容
01 前言 本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux內核,能看懂Linux內核。 擁有超過1300萬行的代碼,Linux
2020-10-21 12:02:53
3873
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/CB/AB/pIYBAF-PsbaASbG3AABoasH5eFg888.png)
BootLoader與Linux內核的參數傳遞詳細資料說明
不同的體系結構,如 ARM, Powerpc,X86,MIPS等。本文著重介紹 Bootloader與內核之間參數傳遞這一基本功能。本文的硬件平臺是基于AT91RM9200處理器系統,軟件平臺是 Linux-2.6.19,2內核。內核映像文件為 zimage
2021-03-16 10:39:00
13
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式LINUX系統內核和內核模塊調試
嵌入式LINUX系統內核和內核模塊調試(嵌入式開發和硬件開發)-嵌入式LINUX系統內核和內核模塊調試? ? ? ? ? ? ? ? ?
2021-07-30 13:55:21
9
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux內核文件Cache機制
Linux內核文件Cache機制(開關電源技術與設計 第二版)-Linux內核文件Cache機制? ? ? ? ? ? ? ??
2021-08-31 16:34:54
4
![](https://skin.elecfans.com/images/2021-soft/load.png)
【2.0】bootloader工作流程、MCU啟動流程
內存空間的映射圖,然后調用Linux 內核。Linux 內核在完成系統的初始化之后需要掛載某個文件系統作為根文件系統(RootFilesystem),然后加載必要的內核模塊,啟動應用程序。(一個嵌入式...
2021-10-28 11:21:01
8
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式 Linux 啟動流程和 bootloader 介紹
目錄嵌入式 Linux 啟動流程簡介啟動流程Bootloader 簡介市面上可見的 bootloader入式 Linux 啟動流程簡介對于一個 SoC 芯片而言,bootloader 必不可少。因為
2021-11-01 16:32:38
11
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式Linux操作系統引導加載程序BootLoarder
過程BootLoarder是什么Linux操作系統分層一個嵌入式Linux系統從軟件的角度看通常可以分為四個層次:引導加載程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。Linux內核。特定于嵌入式板子的定制內核以及內核的啟動參數。文件系統。包括根文件系統和建立于F
2021-11-01 17:05:50
8
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式Linux的內核編譯
實驗環境VMware Workstation PlayerUbuntu16.04kernel-3.2.tar.bz2Linux內核編譯在ubuntu上編譯嵌入式Linux內核,需要大家提前安裝好交叉
2021-11-01 17:07:20
16
![](https://skin.elecfans.com/images/2021-soft/load.png)
【Linux】嵌入式Linux系統的移植(下篇:BootLoader,以U-Boot為例)
BootLoaderBootLoader的概念BootLoader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到
2021-11-01 17:37:10
19
![](https://skin.elecfans.com/images/2021-soft/load.png)
uboot研讀筆記 | 00 - 嵌入式Linux系統中Bootloader的作用和基本運行原理
1. 嵌入式Linux系統開發架構一個嵌入式Linux的系統的架構如下圖:軟件程序開發中,從下往上每一次的作用依次為:Bootloader:將硬件初始化,并將內核引導起來;Linux Kernel
2021-11-02 13:36:31
12
![](https://skin.elecfans.com/images/2021-soft/load.png)
【嵌入式Linux之QEMU模擬器】5、使用u-boot加載Linux內核
在前面的實驗中,我們都是直接運行Linux內核。而在實際的嵌入式系統中都是通過BootLoader加載Linux鏡像,然后再去運行。嵌入式BootLoader功能類似PC中的BIOS,用以檢測硬件
2021-11-02 15:21:03
14
![](https://skin.elecfans.com/images/2021-soft/load.png)
理解嵌入式開發中BootLoader、內核和根文件系統之間的關系
理解嵌入式開發中BootLoader、內核和根文件系統之間的關系一般來說,為了使開發板成功運行linux系統,我們需要完成以下三個方面的開發工作:bootloader(啟動裝載)kernel(內核
2021-11-03 12:06:06
13
![](https://skin.elecfans.com/images/2021-soft/load.png)
為STM32寫bootloader 使用串口,實現程序IAP升級
,以便為最終調用操作系統內核準備好正確的環境。BIOS是windows的bootloader,u-boot等為常見的Linux開發版的bootloader。ARM內核芯片下載程序方式可分為三類;...
2021-12-24 19:02:23
2
![](https://skin.elecfans.com/images/2021-soft/load.png)
Linux內核架構和工作原理
作用是將應用層序的請求傳遞給硬件,并充當底層驅動程序,對系統中的各種設備和組件進行尋址。目前支持模塊的動態裝卸(裁剪)。Linux內核就是基于這個策略實現的。Linux進程1.采用層次結構,每個進程
2022-05-07 14:05:06
284
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com//web2/M00/41/D4/pYYBAGJ2DBKARSwqAAB5uU4SvlA467.jpg)
學習linux內核的一些建議
學習linux內核,這個可不像學一門語言,c或者java一個月或者3月你就能精通掌握。學習linux內核是需要一步一步循序漸進,掌握正確的linux內核學習路線對學習至關重要,本篇文章就來分享學習linux內核的一些建議吧。
2022-05-07 15:20:27
447
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com//web2/M00/41/D8/poYBAGJ2HbyAZ1KJAADzv0dfNck385.jpg)
Linux驅動開發-安裝驅動參數傳遞
Linux驅動安裝時也支持傳遞參數,和命令行上運行的命令原理類似。 只不過在編寫驅動的時候,需要在驅動代碼里提前將相關信息聲明好才可以使用。 這篇文章就介紹如果在命令安裝驅動時,傳遞參數給驅動代碼,演示各種類型的參數傳輸情況。
2022-09-17 15:30:15
1156
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com//web2/M00/6A/5A/poYBAGMlQGmAGYHSAANqlSPwW_4008.png)
Linux內核移植教程
半導體廠商會從 Linux內核官網下載某個版本,將其移植到自己的 CPU上,測試成功后就會將其開放給該半導體廠商的 CPU開發者。開發者下載其提供的 Linux內核,然后將其移植到自己的產品上。
2023-04-19 11:20:32
701
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/82/12/wKgZomQ_W9CAOWUuAANwusq3mzg390.jpg)
Linux內核模塊參數傳遞與sysfs文件系統
Linux應用開發中,為使應用程序更加靈活地執行用戶的預期功能,我們有時候會通過命令行傳遞一些參數到main函數中,使得代碼邏輯可以依據參數執行不同的任務。同樣,Linux內核也提供了類似main
2023-06-07 16:23:21
1241
![](https://skin.elecfans.com/images/2021-soft/eye.png)
Linux內核入口stext段分析
/kernel/head.S preserve_boot_args 保存 bootloader 傳遞過來的參數。 el2_setup 是設置 Linux 啟動模式是 EL2。Linux 有 EL0、EL1
2023-09-28 17:07:55
883
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/A6/86/wKgaomUVQCOAUS9hAAAuww7tKjQ124.jpg)
Linux內核UDP收包為什么效率低
現在很多人都在詬病Linux內核協議棧收包效率低,不管他們是真的懂還是一點都不懂只是聽別人說的,反正就是在一味地懟Linux內核協議棧,他們的武器貌似只有DPDK。 但是,即便Linux內核協議
2023-11-13 10:38:08
214
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/AD/69/wKgaomVNmiuAW_9kAAA1_nmyS_o219.jpg)
評論