PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
請教高手 ARM linux kernel 的一個問題

請問有沒有高手知道那個...
ARM linux zImage 格式, 一開始不都會執行 mov r0,r0 一共八次嗎?
為什麼要這樣做呢? 我都找不到相關文件解釋要這樣做的原因.
其實這不是很重要啦, 只是剛剛在改 kernel 時, 突然想到這個放很久的問題.
想說 PCDVD 臥虎藏龍, 應該有人會知道.
     
      
__________________
滿招損 謙受益
舊 2011-08-01, 02:49 PM #1
回應時引用此文章
darkangel離線中  
jamin
Senior Member
 
jamin的大頭照
 

加入日期: Dec 2002
文章: 1,370
ARM 的 mov r0,r0 好像是 NOP

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


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


 
 
__________________
要討論也要找能溝通的, 跟狂吠的狗溝通只是浪費時間. 每日一句 : 很多不等於多數,也不等於少數
舊 2011-08-01, 04:35 PM #2
回應時引用此文章
jamin離線中  
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
引用:
作者jamin
ARM 的 mov r0,r0 好像是 NOP

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


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


 


你跟我的猜想完全一樣, 實際上我是比較想看到這樣做的原始動機或典故.
pipeline 那套 fetch, decode, execute 我知道, 但執行八次 nop 就很耐人尋味, 我個人比較傾向於保留用, 但我想要的不是猜想的答案.
__________________
滿招損 謙受益
舊 2011-08-01, 04:56 PM #3
回應時引用此文章
darkangel離線中  
nawtequalizer
*停權中*
 

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

我不是ARM這方面專長的人,
不過不同客製化的ARM,如TI/Samsung/Freescale.....應該都有各自不同的技巧,以我的經驗來說就是不能說但大家都知道的秘密,像是之前的公司自己開發生產的MCU,assembly code當中一定會埋一堆NOP,如果好奇刪了這些NOP,一定會出一些奇奇怪怪的問題,而且NOP的數量也不能太多,也不能太少。
舊 2011-08-01, 10:17 PM #4
回應時引用此文章
nawtequalizer離線中  
KKao
*停權中*
 

加入日期: Jan 2002
您的住址: 台北
文章: 172
引用:
作者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 的過程,

可能會瞎子摸象
舊 2011-08-01, 10:59 PM #5
回應時引用此文章
KKao離線中  
anomaly
Advance Member
 

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

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

啟動後就不用去搞這些ASM東西
舊 2011-08-01, 11:15 PM #6
回應時引用此文章
anomaly離線中  
jamin
Senior Member
 
jamin的大頭照
 

加入日期: Dec 2002
文章: 1,370
引用:
作者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 做不是很奇怪嗎?
__________________
要討論也要找能溝通的, 跟狂吠的狗溝通只是浪費時間. 每日一句 : 很多不等於多數,也不等於少數
舊 2011-08-01, 11:27 PM #7
回應時引用此文章
jamin離線中  
anomaly
Advance Member
 

加入日期: Feb 2003
文章: 406
引用:
作者jamin
真是奇怪的特性

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


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

MMU開啟後才能跑C

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

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

以前是玩工作站級的SGI IRIX跟 SunOS
舊 2011-08-02, 12:05 AM #8
回應時引用此文章
anomaly離線中  
hakken
Regular Member
 

加入日期: Sep 2002
您的住址: Earth
文章: 56
在arm論壇有人討論
可以參考
舊 2011-08-02, 12:25 AM #9
回應時引用此文章
hakken離線中  
latw
Junior Member
 
latw的大頭照
 

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

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

此文章於 2011-08-02 01:08 AM 被 latw 編輯.
舊 2011-08-02, 01:06 AM #10
回應時引用此文章
latw離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



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


vBulletin Version 3.0.1
powered_by_vbulletin 2025。