PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   請教高手 ARM linux kernel 的一個問題 (https://www.pcdvd.com.tw/showthread.php?t=937663)

darkangel 2011-08-01 02:49 PM

請教高手 ARM linux kernel 的一個問題
 
請問有沒有高手知道那個...
ARM linux zImage 格式, 一開始不都會執行 mov r0,r0 一共八次嗎?
為什麼要這樣做呢? 我都找不到相關文件解釋要這樣做的原因.
其實這不是很重要啦, 只是剛剛在改 kernel 時, 突然想到這個放很久的問題.
想說 PCDVD 臥虎藏龍, 應該有人會知道.
:shy: :shy: :shy: :shy: :shy: :shy:

jamin 2011-08-01 04:35 PM

ARM 的 mov r0,r0 好像是 NOP

NOP 大多是為了延遲時間, 另一個可能是預留位置.


沒做過 ARM 的菜鳥不負責猜測 :ase


 

darkangel 2011-08-01 04:56 PM

引用:
作者jamin
ARM 的 mov r0,r0 好像是 NOP

NOP 大多是為了延遲時間, 另一個可能是預留位置.


沒做過 ARM 的菜鳥不負責猜測 :ase


 


你跟我的猜想完全一樣, 實際上我是比較想看到這樣做的原始動機或典故.
pipeline 那套 fetch, decode, execute 我知道, 但執行八次 nop 就很耐人尋味, 我個人比較傾向於保留用, 但我想要的不是猜想的答案.

nawtequalizer 2011-08-01 10:17 PM

引用:
作者darkangel
你跟我的猜想完全一樣, 實際上我是比較想看到這樣做的原始動機或典故.
pipeline 那套 fetch, decode, execute 我知道, 但執行八次 nop 就很耐人尋味, 我個人比較傾向於保留用, 但我想要的不是猜想的答案.

我不是ARM這方面專長的人,
不過不同客製化的ARM,如TI/Samsung/Freescale.....應該都有各自不同的技巧,以我的經驗來說就是不能說但大家都知道的秘密,像是之前的公司自己開發生產的MCU,assembly code當中一定會埋一堆NOP,如果好奇刪了這些NOP,一定會出一些奇奇怪怪的問題,而且NOP的數量也不能太多,也不能太少。

KKao 2011-08-01 10:59 PM

引用:
作者nawtequalizer
我不是ARM這方面專長的人,
不過不同客製化的ARM,如TI/Samsung/Freescale.....應該都有各自不同的技巧,以我的經驗來說就是不能說但大家都知道的秘密,像是之前的公司自己開發生產的MCU,assembly code當中一定會埋一堆NOP,如果好奇刪了這些NOP,一定會出一些奇奇怪怪的問題,而且NOP的數量也不能太多,也不能太少。



如果對整個系統的架構不清楚,有可能猜不出來。

舉個例子,可能會跟 boot loader memory re-map 的有關,

也有可能那段code 在 loader 那邊是一個 function table 之類的,

也有可能是原先是 interrupt table, ARM reset 之後從0開始跑,

從0 開始是 exception handler table , 如果沒弄清楚 boot 的過程,

可能會瞎子摸象

anomaly 2011-08-01 11:15 PM

ARM 裡頭的Pipeline是靠NOP去flush. 開機時, pipeline裡頭的資料不可靠, 且 PC 已經指向 Execute段, 需要把所有pipeline弄到確定的狀況時才能啟動memory management

1. Fetch
2. Decode
3. Execute
4. Buffer
5. Write Back

啟動後就不用去搞這些ASM東西

jamin 2011-08-01 11:27 PM

引用:
作者anomaly
ARM 裡頭的Pipeline是靠NOP去flush. 開機時, pipeline裡頭的資料不可靠, 且 PC 已經指向 Execute段, 需要把所有pipeline弄到確定的狀況時才能啟動memory management

1. Fetch
2. Decode
3. Execute
4. Buffer
5. Write Back

啟動後就不用去搞這些ASM東西

真是奇怪的特性

不過, 這些應該在 bootloader 就會做的事, 在 linux 做不是很奇怪嗎? :confused:

anomaly 2011-08-02 12:05 AM

引用:
作者jamin
真是奇怪的特性

不過, 這些應該在 bootloader 就會做的事, 在 linux 做不是很奇怪嗎? :confused:


kernel解壓縮後在MMU起來前仍然是ASM, 意味著每種硬體平台都要有自己的一套啟動

MMU開啟後才能跑C

ASM那段需要把Stack設定好, page table 設定好, 等等

小弟已經差不多10年沒有碰這個東西了, 或許有點生疏.

以前是玩工作站級的SGI IRIX跟 SunOS

hakken 2011-08-02 12:25 AM

在arm論壇有人討論
可以參考

latw 2011-08-02 01:06 AM

引用:
作者darkangel
請問有沒有高手知道那個...
ARM linux zImage 格式, 一開始不都會執行 mov r0,r0 一共八次嗎?
為什麼要這樣做呢? 我都找不到相關文件解釋要這樣做的原因.
其實這不是很重要啦, 只是剛剛在改 kernel 時, 突然想到這個放很久的問題.
想說 PCDVD 臥虎藏龍, 應該有人會知道.
:shy: :shy: :shy: :shy: :shy: :shy:

小弟淺見...
一般來說在linux kernel被載入之前會有boot loader.
boot loader將linux載入後會call linux的start function.
但是這個start function未必是0x00的地方, 但是這個位置應該是由linker來決定....
--
基本上當載入linux kernel已經算是非常後期...對崁入式系統來說....
都有stack可用, 表是基本的相關硬體都已經弄好了.
而且就連最夯的u-boot大部分也都是用C在寫, 組合語言佔的比例真的很少很少了


所有的時間均為GMT +8。 現在的時間是12:50 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。