有很多同學在移植u-boot時,都會對s3c2440從nand
flash啟動的過程非常迷惑。這裡發這個帖子給大家介紹一下它的啟動流程。
大部分arm9的cpu內部都整合有乙個sram,sram是英文static ram的縮寫,它是一種具有靜止訪問功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料。這樣他不需要初始化就能夠直接使用。這與我們在外部擴充套件的大容量的sdram是不一樣的,外部大容量的sdram是需要初始化後才能使用的,這點大家務必要搞清楚。這點在我做過移植的處理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是這樣的。在s3c2440這顆cpu上這個sram大小為4kb,datasheet裡把它叫做stepping stone,江湖人稱「起步石」。
nandflash和norflash是不同的:norflash像記憶體一樣是直接掛在系統匯流排上的,這樣有足夠多的位址線使得cpu能夠定址到每乙個儲存單元上去,這也意味著cpu能夠直接通過匯流排訪問norflash上儲存的內容,同時他還支援xip(即片上執行,不用將**搬到記憶體中,直接在norflash上就能執行)。 而nandflash它並不是直接掛載系統匯流排上,而是通過nandflash控制器(這個一般整合在cpu內部)來完成讀寫操作的。如果我們把norflash的那種定址方式叫直接定址的話(不是彙編裡的那個直接定址,這裡指cpu能夠直接通過位址線訪問儲存器的儲存單元),那麼這裡的nandflash就是間接定址(這裡需要nandflash控制器來定址)。所以我們在使用nandflash之前,一定要初始化nandflash控制器。
理解上面的這點後,就不難理解,為什麼系統能夠從norflash直接啟動,而不能直接從nandflash啟動。這是因為,arm在cpu復位時,cpu缺省會到0x0000 0000位址處去取指令,而如果我們是從norflash啟動的話(一般norflash會掛到bank0,ngcs0上),s3c2440 cpu就會把norflash的空間掛接到0x0000 0000這段記憶體空間上。這時cpu就能夠直接從norflash上取指令執行,啟動了。而如果是nandflash, 因為nandflash他不能直接掛到系統匯流排上,並且他的讀寫,擦除操作必須依賴nandflash控制器,這也就意味著nandflash的儲存空間永遠不能對映到0x0000 0000這個位址上去。另外,nandflash的讀寫操作也不是這樣直接定址的,有興趣的同學可以自己看看nandlfash的datasheet,寫乙個raw的nandflash 擦除,讀寫操作程式就明白了。我就寫過這麼乙個程式,對理解nandflash究竟是怎麼操作的非常有幫助。
而如果這些cpu要從nandflash上啟動,那該怎麼辦呢?這就要用到我之前提到的cpu的內部sram了。
在s3c2440的datasheet裡有提到,如果我們配置從nandflash啟動的話,那麼cpu會自動將內部sram的位址對映到0x0000 0000這個位址空間上了,而如果不是從nandflash啟動,那麼掛載bank0(ngcs0)上的裝置就會被對映到0x0000 0000位址空間上,如我們之前提到的norflash。如下圖所示:
簡而言之就是:如果從nandflash啟動,那麼cpu內部sram被對映到0x0000 0000位址空間上,這時norflash就不可用了。而如果是從norflash啟動的話,那麼norflash被對映到0x0000 0000位址空間上。我們之前提到arm cpu在復位時,會預設到0x0000 0000位址上取指令。這樣也就是如果從nandflash啟動的話,那麼cpu缺省會從內部sram中取第一條指令;而如果從norflash啟動的話,那麼cpu預設從norflash中取第一條指令。
那如果從sram啟動的話,那麼sram中的指令(也就是**)從**來的呢?在s3c2440處理器(arm920t和arm926t的核應該都是這樣的,另外我看s3c6410也是如此)上電時,cpu會自動將nandflash的前4k**(或叫指令)拷貝到內部sram中,這是由cpu自動完成的,不需要我們干預。這也就意味著,sram中的內容就是我們nandflash上前4k的**了。
這樣,如果是在我們的bootloader如u-boot中就要確保,我們編譯出來的前4k**完成以下功能:
1, 初始化cpu,外部sdram,nandflash控制器等基本功能;
2, 將nandflash上剩餘的u-boot**拷貝到外部的sdram中
3, 調到外部的sdram中來執行u-boot**。
這樣,u-boot就啟動了。
ARM位址對映
重對映之後,一般原來的位址依然有效。也就是說,可能兩個位址,對應乙個儲存單元。arm晶元的位址重對映 對映就是一一對應的意思。重對映就是重新分配這種一一對應的關係。我們可以把儲存器看成乙個具有輸出和輸入口的黑盒子,如下圖所示,輸入量是位址,輸出的是對應位址上儲存的資料。當然這個黑盒子是由很複雜的半導...
ARM位址空間
摘編 在嵌入式系統中,核心映像與根檔案系統映像儲存在 rom 或 flash 等固態儲存裝置中,並且可以直接執行。但這樣做是執行速度太慢,所以要把他們載入到ram中.實現主要有以下過程 以嵌入式linux為例 1.檢測記憶體對映.記憶體對映就是指在整個 4gb cpu 實體地址空間中有哪些位址範圍被...
各網盤活動位址及點評 14 03 28
dbank 無限 華為網盤公升級t級空間,所有網盤使用者登入最新版安卓客戶端後,在活動頁面即可領取2t永久空間,華為手機使用者最高可領取16t永久空間。微雲 10t 360雲盤 36t flickr 1t 需要gfw 金山快盤 100g 微盤 100g 酷盤 10t lance 我的英文名 觀點 8...