加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

Linux BSP實戰(zhàn)課(SoC bringup篇):Kernel 的初始化過程

2023/11/21
5938
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

最全最詳細的Linux BSP 實戰(zhàn)教程,共100篇,包含SOC Bringup, Uboot, 內(nèi)核啟動, 中斷, 時鐘, 電源, GPIO, DMA, 低速總線, 高速總線, 音頻, 顯示, 攝像頭, 網(wǎng)絡驅(qū)動等;博主創(chuàng)建了專門的專欄技術討論群,以及免費的ChatGPT使用,和大佬們一起討論實戰(zhàn);經(jīng)過兩年的輸出和完善打磨,將碎片化的知識進行整理;通過圖文并茂的方式淺入深出。

內(nèi)核運行的第一行代碼

.head.text 文本段

Head.S

start_kernel

setup_arch

mm_init

sched_init

init_IRQ

tick_init

init_timers

hrtimers_init

softirq_init

time_init

console_init

vfs_caches_init

rest_init

 

上文我們講到,內(nèi)核中各個階段的初始化非常重要,涉及內(nèi)容很多,比如內(nèi)存管理,進程管理,文件系統(tǒng),中斷管理,時鐘管理等。就算淺嘗輒止的描述每個模塊,至少也要一萬字的總結,所以內(nèi)核的重要程度很有必要單獨作為一章梳理。

讓我們一起正式進入內(nèi)核的世界,站在內(nèi)核的角度,內(nèi)核之前的所有程序都是系統(tǒng)引導程序,其中 CPU 的狀態(tài)如下:

r0 = 0.

r1 = CPU 類型.

r2 = kernel參數(shù)list的物理地址.

irq & fiq 必須關閉.

MMU 必須關閉,這里內(nèi)存地址都是物理地址.

D-cache 必須關閉,I-cache 沒有要求.

內(nèi)核運行的第一行代碼

Linux啟動,會啟動內(nèi)核編譯后的文件 vmlinux,vmlinux 是一個 ELF 文件,按照 ./arch/arm64/kernel/vmlinux.lds 設定的規(guī)則進行鏈接,vmlinux.lds 是 vmlinux.lds.S 編譯之后生成的。所以為了確定 vmlinux 內(nèi)核的起始地址, 首先通過 vmlinux.lds.S 鏈接腳本進行分析。如下所示:

$?readelf?-h?vmlinux
ELF?Header:
??Magic:???7f?45?4c?46?02?01?01?00?00?00?00?00?00?00?00?00
??Class:?????????????????????????????ELF64
??Data:??????????????????????????????2's?complement,?little?endian
??Version:???????????????????????????1?(current)
??OS/ABI:????????????????????????????UNIX?-?System?V
??ABI?Version:???????????????????????0
??Type:??????????????????????????????DYN?(Shared?object?file)
??Machine:???????????????????????????AArch64
??Version:???????????????????????????0x1
??Entry?point?address:???????????????0xffff800010000000
??Start?of?program?headers:??????????64?(bytes?into?file)
??Start?of?section?headers:??????????494679672?(bytes?into?file)
??Flags:?????????????????????????????0x0
??Size?of?this?header:???????????????64?(bytes)
??Size?of?program?headers:???????????56?(bytes)
??Number?of?program?headers:?????????5
??Size?of?section?headers:???????????64?(bytes)
??Number?of?section?headers:?????????38
??Section?header?string?table?index:?37
$?readelf?-l?vmlinux

Elf?file?type?is?DYN?(Shared?object?file)
Entry?point?0xffff800010000000
There?are?5?program?headers,?starting?at?offset?64

Program?Headers:
??Type???????????Offset?????????????VirtAddr???????????PhysAddr
?????????????????FileSiz????????????MemSiz??????????????Flags??Align
??LOAD???????????0x0000000000010000?0xffff800010000000?0xffff800010000000
?????????????????0x0000000001beacdc?0x0000000001beacdc??RWE????10000
??LOAD???????????0x0000000001c00000?0xffff800011c00000?0xffff800011c00000
?????????????????0x00000000000c899c?0x00000000000c899c??R?E????10000
??LOAD???????????0x0000000001cd0000?0xffff800011cd0000?0xffff800011cd0000
?????????????????0x0000000000876200?0x0000000000905794??RW?????10000
??NOTE???????????0x0000000001bfaca0?0xffff800011beaca0?0xffff800011beaca0
?????????????????0x000000000000003c?0x000000000000003c??R??????4
??GNU_STACK??????0x0000000000000000?0x0000000000000000?0x0000000000000000
?????????????????0x0000000000000000?0x0000000000000000??RW?????10

?Section?to?Segment?mapping:
??Segment?Sections...
???00?????.head.text?.text?.got.plt?.rodata?.pci_fixup?__ksymtab?__ksymtab_gpl?__ksymtab_strings?__param?__modver?__ex_table?.notes
???01?????.init.text?.exit.text?.altinstructions
???02?????.init.data?.data..percpu?.hyp.data..percpu?.rela.dyn?.data?__bug_table?.mmuoff.data.write?.mmuoff.data.read?.pecoff_edata_padding?.bss
???03?????.notes
???04

通過上面的查詢可知,此 vmlinux 為一個 aarch64 架構平臺的 ELF 可執(zhí)行文件,其程序入口的地址為 0xffff800010000000,此段對應的 section 為.head.text .text .got.plt......,所以 vmlinux 的入口在 .head.text 文本段。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
KSZ8001LI-TR 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48

ECAD模型

下載ECAD模型
$4.89 查看
NC7WZ04P6X 1 Rochester Electronics LLC LVC/LCX/Z SERIES, DUAL 1-INPUT INVERT GATE, PDSO6, 1.25 MM, ROHS COMPLIANT, EIAJ, SC-88, SC-70, 6 PIN
$0.33 查看
25AA02E48-I/SN 1 Microchip Technology Inc 256 X 8 SPI BUS SERIAL EEPROM, PDSO8, 3.90 MM, ROHS COMPLIANT, PLASTIC, SOIC-8

ECAD模型

下載ECAD模型
$0.53 查看

相關推薦

電子產(chǎn)業(yè)圖譜

針對嵌入式人工智能,物聯(lián)網(wǎng)等專業(yè)技術分享和交流平臺,內(nèi)容涉及arm,linux,android等各方面。

Arm64 ?;厮?>
				</a>
							</li>
						<li id= 查看更多