自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android自動識別內存的大小

移動開發(fā) Android
其實大家不用那么在意android手機剩余內存對大小,很多人都是把使用其他系統(tǒng)的習慣帶到了android手機上,ubushi所有的智能手機系統(tǒng)都一樣 ,

1、MINI6410的內存硬件結構與尋址關系

在看過上面的文檔之后,相信應該對DDR內存有了一個比較完整的認識和理解,下面我們就來講講在MINI6410上的內存硬件結構:

對于MINI6410的設計,用了兩塊引腳兼容的DDR內存芯片來實現(xiàn)128MB內存和256MB內存可共用一個PCB。
128MB內存使用的是兩片K4X51163PG(32Mx16bit),形成一個32M×32bit(128MB) 的內存。256MB內存使用的是兩片K4X1G163PE(64Mx16bit),形成一個64M×32bit(256MB) 的內存。而這兩款芯片在引腳上的差別就是K4X51163PG的F7是NC腳,而K4X1G163PE的F7腳是A13 。這個F7引腳在 128MB內存版本的MINI6410中這個引腳是不連接的,而256MB版本中是通過一個0歐電阻和S3C6410的Xm1ADDR13相連的 。

看了這兩個內存芯片和S3C6410(DRAM控制器)的數(shù)據(jù)手冊 的朋友一定知道,這種連接形成一個這樣的尋址關系:

128MB內存版本:Xm1ADDR[15:14](bank):Xm1ADDR[12 :0](行地址):Xm1ADDR[9:0](列地址) 。一共25根地址線剛好可尋址32M空間。256MB內存版本:Xm1ADDR[15:14](bank):Xm1ADDR[13 :0](行地址):Xm1ADDR[9:0](列地址) 。一共26根地址線剛好可尋址64M空間。而這兩種連接和芯片配置也要通過修改S3C6410的DRAM控制器的兩個寄存器的參數(shù)來匹配。

2、U-boot中內存自適應代碼應處的位置
 
做好了以上的兩個知識準備后,我們看看在u-boot中應該在什么位置來識別和自適應不同的內存大小。
首先我們在識別了內存大小之后可能需要重新配置S3C6410的內存控制器。這么一來,這些代碼不能在DDR中運行。因為一旦重新配置內存控制器,必然導致內存暫時無法使用,如果代碼在DDR中CPU可能無法得到下一步的代碼。所以這些代碼要放在u-boot實現(xiàn)自拷貝到內存之前的地方,其實***的地方就是在u-boot的SPL部分中初始化內存控制器的代碼段中。

這些代碼就在:arch/arm/cpu/arm1176/s3c64xx/cpu_init.S

這個文件是匯編代碼,其中的函數(shù)mem_ctrl_asm_init是通過start.S中的“bl    lowlevel_init”------>/board/samsung/mini6410/lowlevel_init.S中的 lowlevel_init ”bl    mem_ctrl_asm_init”調用的。mem_ctrl_asm_init函數(shù)中的代碼對S3C6410的DRAM控制器進行了初始化,并對外部的DDR內存也進行了初始化,所以內存的識別和自適應代碼應該放在這些初始化之后。先識別內存的大小,如果內存大小和原先DRAM控制器的配置不相符,就修改DRAM控制器的配置。

3、內存大小的識別

針對MINI6410的情況,我們只需要識別內存是128MB還是256MB。由于這兩種內存大小關系到DRAM控制器的兩個寄存器的參數(shù) ,所有我們必須先假設我們的內存大小,再通過讀寫的方式來證明,如果證明我們的假設是錯誤的,再修改寄存器的參數(shù)。

我移植的U-boot代碼中首先假設內存是256MB,并先配置DRAM控制器為256MB內存的參數(shù)。如果這時連接的是128MB內存 ,那么就會有這樣一個有趣的現(xiàn)象:

由于Xm1ADDR[13 ] 沒有連接,所以DDR內存的***個8M×32bit(32MB)和第二個8M×32bit(32MB)是鏡像關系,第三個8M×32bit(32MB)和第四個8M×32bit(32MB)是鏡像關系,以此類推。一共有四個這樣的鏡像關系,共256MB。如果連接的就是256MB的內存就不會有這樣的現(xiàn)象。所以,只要我們證明了這種現(xiàn)象存在,就證明了我們其實連接的是128MB內存,然后重新配置DRAM控制器為128MB內存的參數(shù)就大功告成了。

所以我移植的U-boot代碼中首先寫一個32bit的測試數(shù)據(jù) 到***個8M×32bit(32MB)的某個位置 (比如0x0地址),然后就去第二個8M×32bit(32MB)相應偏移位置讀取,如果數(shù)據(jù)一致就可以證明鏡像關系。但是還不保險,如果就是這么巧(在連接 256MB的內存的情況下)第二個8M×32bit(32MB)相應位置本身就是這個數(shù)據(jù)怎么辦?不要緊,我們再去第二個8M×32bit(32MB)同一位置 寫入另一個測試數(shù)據(jù) ,然后去***個8M×32bit(32MB)的那個位置(也就是一開始的那個寫入位置)讀取數(shù)據(jù),如果數(shù)據(jù)一致就完全可以證明鏡像關系。通過這樣的兩次測試,看看是否要重新配置DRAM控制器參數(shù)

但是我們不能 假設內存是128MB ,并先配置DRAM控制器為128MB內存的參數(shù)。如果連接的是256MB的內存,沒有任何特殊的現(xiàn)象可以測試到。通過上面的尋址關系,如果連接的是256MB的內存,只是第二、四、六、八(假設Xm1ADDR[13 ]一直是0 )個8M×32bit(32MB)是沒法訪問的(可以說是內存空洞),這個無法通過讀寫證明。(通過尋址關系推斷,未通過實驗證明)

4、關于內存控制器的重配置

如果上面的步驟中測試出了鏡像的存在,我們必須重新配置兩個寄存器的值,但是如何重新配置,這個三星的數(shù)據(jù)手冊是沒有講的,我通過測試發(fā)現(xiàn)可以通過以下的步驟重新配置DRAM控制器:

1、將DRAM控制器設為暫停(Paused)狀態(tài);

2、檢測P1MEMSTAT,直到確認了暫停(Paused)狀態(tài);

3、將DRAM控制器設為配置(Config)狀態(tài);

4、檢測P1MEMSTAT,直到確認了配置(Config)狀態(tài);

5、修改需要重新配置的寄存器

6、將DRAM控制器設為啟動(Go)狀態(tài);

7、檢測P1MEMSTAT,直到確認了就緒(Ready)狀態(tài);

【編輯推薦】

Android 不要做錯來使內存泄漏

Android 多任務多線程斷點下載

Android Activity和Intent機制學習筆記

在Android應用程序中使用Internet數(shù)據(jù)

責任編輯:zhaolei 來源: 互聯(lián)網
相關推薦

2021-12-26 07:43:50

aDLLDLL漏洞

2016-12-22 12:40:06

辦公外設

2017-10-04 12:20:28

阿里智能加油站加油

2009-07-14 14:23:45

2022-09-21 08:40:04

OCR技術驗證碼

2021-06-08 06:37:05

蘋果iOS 15iOS

2013-03-18 17:33:42

打印機

2019-09-06 13:50:08

垃圾分類識別智能

2022-08-31 15:03:41

鐵塔網絡結構網絡覆蓋

2023-03-07 13:32:33

谷歌模型

2017-11-06 13:13:14

馬拉松支付寶參賽選手

2014-10-16 09:30:31

RFID

2010-06-17 17:56:57

世博IT監(jiān)控Rfid

2018-04-20 07:22:59

物聯(lián)網互聯(lián)網IoT

2016-03-09 10:03:25

RFID技術條形碼二維碼

2017-02-13 16:16:35

Android內存

2021-08-27 14:36:01

主題建模BerTopic

2019-09-04 09:20:32

AI 數(shù)據(jù)人工智能

2010-09-17 15:47:14

TOMCATJVM
點贊
收藏

51CTO技術棧公眾號