第14, 15行: 函數(shù)聲明
第16 - 24行: 定義了一些地址,例如第16行存儲(chǔ)的是 mmap_switched 的地址, 第17行存儲(chǔ)的是 data_loc 的地址 ......
第34, 35行: 函數(shù) mmap_switched
第36行: 取 switch_data + 4的地址到r3. 從上文可以看到這個(gè)地址就是第17行的地址.
第37行: 依次取出從第17行到第20行的地址,存儲(chǔ)到r4, r5, r6, r7 中. 并且累加r3的值.當(dāng)執(zhí)行完后, r3指向了第21行的位置.
對(duì)照上文,我們可以得知:
r4 - data_loc
r5 - data_start
r6 - bss_start
r7 - end
這幾個(gè)符號(hào)都是在 arch/arm/kernel/vmlinux.lds.S 中定義的變量:
00102: #ifdef CONFIG_XIP_KERNEL
00103: __data_loc = ALIGN(4); /* location in binary */
00104: . = PAGE_OFFSET + TEXT_OFFSET;
00105: #else
00106: . = ALIGN(THREAD_SIZE);
00107: __data_loc = .;
00108: #endif
00109:
00110: .data : AT(__data_loc) {
00111: __data_start = .; /* address in memory */
00112:
00113: /*
00114: * first, the init task union, aligned
00115: * to an 8192 byte boundary.
00116: */
00117: *(.init.task)
......
00158: .bss : {
00159: __bss_start = .; /* BSS */
00160: *(.bss)
00161: *(COMMON)
00162: _end = .;
00163: }
對(duì)于這四個(gè)變量,我們簡單的介紹一下:
data_loc 是數(shù)據(jù)存放的位置
data_start 是數(shù)據(jù)開始的位置
bss_start 是bss開始的位置
end 是bss結(jié)束的位置, 也是內(nèi)核結(jié)束的位置
其中對(duì)第110行的指令講解一下: 這里定義了.data 段,后面的AT(data_loc) 的意思是這部分的內(nèi)容是在data_loc中存儲(chǔ)的(要注意,儲(chǔ)存的位置和鏈接的位置是可以不相同的). 關(guān)于 AT 詳細(xì)的信息請參考 ld.info
第38行: 比較 data_loc 和 data_start
第39 - 43行: 這幾行是判斷數(shù)據(jù)存儲(chǔ)的位置和數(shù)據(jù)的開始的位置是否相等,如果不相等,則需要搬運(yùn)數(shù)據(jù),從 data_loc 將數(shù)據(jù)搬到 data_start.
其中 bss_start 是bss的開始的位置,也標(biāo)志了 data 結(jié)束的位置,因而用其作為判斷數(shù)據(jù)是否搬運(yùn)完成.
第45 - 48行: 是清除 bss 段的內(nèi)容,將其都置成0. 這里使用 end 來判斷 bss 的結(jié)束位置.
第50行: 因?yàn)樵诘?8行的時(shí)候,r3被更新到指向第21行的位置.因而這里取得r4, r5, r6, sp的值分別是:
r4 - processor_id
r5 - machine_arch_type
r6 - cr_alignment
sp - init_thread_union + THREAD_START_SP
processor_id 和 machine_arch_type 這兩個(gè)變量是在 arch/arm/kernel/setup.c 中 第62, 63行中定義的. cr_alignment 是在 arch/arm/kernel/entry-armv.S 中定義的:
00182: .globl cr_alignment
00183: .globl cr_no_alignment
00184: cr_alignment:
00185: .space 4
00186: cr_no_alignment:
00187: .space 4
init_thread_union 是 init進(jìn)程的基地址. 在 arch/arm/kernel/init_task.c 中:
00033: union thread_union init_thread_union
00034: __attribute__((__section__('.init.task'))) =
00035: { INIT_THREAD_INFO(init_task) };
對(duì)照 vmlnux.lds.S 中的 的117行,我們可以知道init task是存放在 .data 段的開始8k, 并且是THREAD_SIZE(8k)對(duì)齊的
第51行: 將r9中存放的 processor id (在arch/arm/kernel/head.S 75行) 賦值給變量 processor_id
第52行: 將r1中存放的 machine id (見'啟動(dòng)條件'一節(jié))賦值給變量 machine_arch_type
第53行: 清除r0中的 CR_A 位并將值存到r4中. CR_A 是在 include/asm-arm/system.h 21行定義, 是cp15控制寄存器c1的Bit1(alignment fault enable/disable)
第54行: 這一行是存儲(chǔ)控制寄存器的值.
從上面 arch/arm/kernel/entry-armv.S 的代碼我們可以得知. 這一句是將r0存儲(chǔ)到了 cr_alignment 中,將r4存儲(chǔ)到了 cr_no_alignment 中.
第55行: 最終跳轉(zhuǎn)到start_kernel
FIN
上一篇:玩轉(zhuǎn)S3C6410之一 交叉工具鏈制作(gcc4.5.1-armv6-vfp)
下一篇:s3c6410學(xué)習(xí)筆記-燒寫uboot+構(gòu)建文件系統(tǒng)
推薦閱讀最新更新時(shí)間:2025-03-25 06:40




設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌穩(wěn)居微控制器領(lǐng)域榜首,鞏固其在全球車用半導(dǎo)體市場的領(lǐng)導(dǎo)地位
- 迅為imx6ull開發(fā)板使用c語言調(diào)用shell命令控制led燈
- 迅為IMX8MM開發(fā)板Android編譯環(huán)境搭建
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的使用
- 迅為ITOP4412開發(fā)板Qt界面添加圖片
- 迅為IMX6開發(fā)板OTA遠(yuǎn)程升級(jí)-SWUpdata概述和使用
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的搭建
- 迅為IMX6開發(fā)板Buildroot文件系統(tǒng)4G撥號(hào)上網(wǎng)工具測試
- 實(shí)驗(yàn)分享丨迅為IMX6ULL開發(fā)板點(diǎn)亮第一個(gè)led燈
- LT1307CMS8 高壓反激式轉(zhuǎn)換器的典型應(yīng)用電路
- LTM4628IY DC/DC 模塊穩(wěn)壓器的典型應(yīng)用電路,用于兩相、1.5V 和 16A 設(shè)計(jì)
- NCP692MN25T2GEVB,用于 NCP692 2.5V DC 至 DC 單輸出電源的評(píng)估模塊
- DER-406 - 適用于 A19 燈的 5.76 W 高 PF 非隔離降壓-升壓型 TRIAC 調(diào)光 LED 驅(qū)動(dòng)器
- 2018電賽D題-手勢識(shí)別裝置(安徽大學(xué))
- LTC6262IDC 低功率、低失真 ADC 驅(qū)動(dòng)器、運(yùn)算放大器的典型應(yīng)用
- STEVAL-MKI126V1,基于MP45DT02的智能語音演示板
- LT8714EFE 200kHz、10V 至 14V 輸入的典型應(yīng)用電路產(chǎn)生一個(gè) -5V 至 5V 輸出同步 PWM 控制器
- TS39154CP4 RO 1.5A 帶使能超低 LDO 典型應(yīng)用電路
- 使用具有最大功率點(diǎn)跟蹤功能的 LTC4162EUFD-L40M 太陽能供電 36 節(jié) 3.2A 充電器的典型應(yīng)用
- OpenCV行人檢測--基于米爾全志T527開發(fā)板
- 神經(jīng)技術(shù)的潛能:貿(mào)澤EIT系列探索技術(shù)與思維交會(huì)點(diǎn)的腦機(jī)接口
- TE Connectivity在推動(dòng)長期可持續(xù)發(fā)展目標(biāo)方面取得顯著進(jìn)展
- 世索科攜一系列用于半導(dǎo)體制造的先進(jìn)材料亮相Semicon China 2025
- TITAN Haptics助力中國健康產(chǎn)業(yè)的革新
- 汽車線束布置的四大注意事項(xiàng)
- 什么原因?qū)е缕囉秃母吆秃桶l(fā)動(dòng)機(jī)轉(zhuǎn)速高
- 莫仕的電容式背光設(shè)計(jì)在汽車應(yīng)用的五大設(shè)計(jì)挑戰(zhàn)與方案
- 關(guān)于車載Ethernet降噪措施的必要性
- 學(xué)子專區(qū)論壇- ADALM2000實(shí)驗(yàn):脈寬調(diào)制
- 余承東:華為Mate Xs虧損6000-7000萬美元
- 美的開啟新一輪轉(zhuǎn)型 加碼機(jī)器人業(yè)務(wù)
- ASML 2019年出售26臺(tái)EUV設(shè)備,機(jī)構(gòu):臺(tái)積電或占一半
- 韓國央行:全球芯片市場火爆勢頭還要持續(xù)一年
- 云塔科技推自主研制5G毫米波濾波器
- 三問偉巴斯特:何以入局動(dòng)力電池領(lǐng)域?
- 合眾動(dòng)力域控制器首次搭載哪吒汽車測試成功
- 突然推進(jìn)固態(tài)電池發(fā)展?日系車企也看到了前景
- 我國電動(dòng)汽車Pack技術(shù)發(fā)展趨勢
- AI/5G如何賦能機(jī)器人
- STM32F103內(nèi)部有無TFT控制器和接口?
- 高速大容量、低功耗、低電壓 8 位單片機(jī) EM78P447
- 小白一個(gè) 求幫助 可以把機(jī)器發(fā)給你研究 ce 6.0的 怎么才能把ce界面上聲音弄出來
- 《MCU工程師煉成記》 閱讀后,有感而發(fā)
- ARM與PC同步問題
- Hynix Q2閃存出貨增84% 銷售價(jià)格大跌
- 請教單片機(jī)或PLC選型
- C6000與C2000系列DSP之間串行數(shù)據(jù)通訊的研究與實(shí)現(xiàn)
- 柳傳志:蘋果正錯(cuò)失中國市場巨大商機(jī)
- 為什么友善之臂mini2440無法連接activesync?