編輯:關於Android編程
1.windows共享文件夾裡 下載、解壓三星官方uboot源碼
2.復制到linux下的目錄
3.在共享文件夾裡面建立SourceInsight 工程
3.1 修改start.S文件 開發板並沒有電源管理模塊
3.2時鐘和DDR的配置移植
3.2.1確認時鐘部分的配置
(1)時鐘部分的運行結果本來就是對的,時鐘部分的代碼在lowlevel_init.S中的bl system_clock_init調用的這個函數中。函數的代碼部分是沒任何問題的,根本不需要改動,要改動的是寄存器寫入的值,這些值都在配置頭文件(smdkv210single.h)中用宏定義定義出來了。如果時鐘部分要更改,關鍵是去更改頭文件中的宏定義。
(2)三星移植時已經把210常用的各種時鐘配置全都計算好用宏開關來控制了。只要打開相應的宏開關就能將系統配置為各種不同的頻率。
3.2.2 DDR配置信息的更改 (smdkv210single.h)
(1)從運行信息以及bdinfo命令看到的結果,顯示DRAM bank0和1的size值都設置錯了。
(2)使用md和mw命令測試內存,發現20000000和40000000開頭的內存都是可以用的,說明代碼中DDR初始化部分是正確的,只是size錯了。
(3)內存部分配置成:
#define CONFIG_NR_DRAM_BANKS 2 /* we have 2 bank of DRAM */
//#define SDRAM_BANK_SIZE 0x20000000 /* 512 MB */
#define SDRAM_BANK_SIZE 0x10000000 /* 256 MB */
#define PHYS_SDRAM_1 MEMORY_BASE_ADDRESS /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE SDRAM_BANK_SIZE
//#define PHYS_SDRAM_2 (MEMORY_BASE_ADDRESS + SDRAM_BANK_SIZE) /* SDRAM Bank #2 */
#define PHYS_SDRAM_2 0x40000000
#define PHYS_SDRAM_2_SIZE SDRAM_BANK_SIZE
3.2.3DDR地址另外配置(smdkv210single.h)
(1)目標:將DDR端口0地址配置為30000000開頭
更改有2個目的:第一是讓大家體驗內存配置的更改過程;第二是3開頭的地址和DRAM bank1上40000000開頭的地址就連起來了。這樣我們就得到了地址連續的512MB內存,而原來我們得到的512MB內存地址是斷續的。
(2)根據裸機中講DDR初始化部分的課程,和uboot前面分析uboot中DDR初始化部分的代碼的課程,得出結論就是:DDR的初始化代碼部分是在lowlevel_init.S中寫的,是不動的。代碼部分就是對相應寄存器做相應值的初始化;要動的是值,而uboot為了具有可移植性把值都宏定義在include/configs/xxx.h中了。因此我們只需要去這個配置頭文件中更改配置值即可。
更改內容是:#define DMC0_MEMCONFIG_0 0x20E01323改為:
#define DMC0_MEMCONFIG_0 0x30F01323 //注意20改為30 、 E改為F 。
3.2.4smdkv210single.h中相關宏定義修改
(1)寄存器的值改了後相當於是硬件配置部分做了更改。但是uboot中DDR相關的一些軟件配置值還沒更改,還在原來位置,所以要去更改。
(2)#define MEMORY_BASE_ADDRESS 0x20000000改為:
#define MEMORY_BASE_ADDRESS 0x30000000
3.2.5虛擬地址映射表中相應修改
(1)uboot中開啟了MMU對內存進行了段式映射,有一張內存映射表。之前課程中分析過,分析方法是一樣的。
(2)經過實際分析,發現這個內存映射只是把20000000開始的256MB映射到C0000000開頭的256MB。我們更改方法是將2改成3.
(3)為了安全起見,再去配置頭文件smdkv210single.h中查一遍,看看有沒有其他的宏定義值和內存配置有關聯的。
//後面還有修改
(1)修改 lowlevel_init.S 中的 。set_base ,0x200 改為0x300
(2)修改uboot/board/samsung/smdkc110/smdkc110.c中的virt_to_phy_smdkc110,將其中的20000000改為30000000即可。
(3)修改uboot/board/samsung/smdkc110/smdkc110.c中的virt_to_phy_smdkc110,將其中的20000000改為30000000即可。
4. 同步改過的文件到 linux 中
4.1 sshsecureshell
http://www.cnblogs.com/mliudong/p/4094519.html
http://blog.sina.com.cn/s/blog_5f435c130102v6pv.html
4.2 腳本
5. 重新配置編譯,燒錄運行查看結果。
uboot/sd_fusing目錄下有sd_fusing.sh腳本,用來燒錄
6.inand驅動問題的解決(driver/mmc/mmc.c)
(1)初步的解決方案是自己先浏覽一遍這個問題點周邊代碼上下文。通過浏覽代碼上下文,發現這個函數是在讀取SD/iNand的ext_csd寄存器的值。通過浏覽代碼結合出錯地方,可以判斷出:從卡端讀取ext_csd寄存器是成功的,並且從讀取結果中拿到了卡的版本號信息。然後代碼對版本號進行了判斷,並且如果版本號大於5就會報錯並且函數錯誤退出。這就是問題所正。
(2)問題就是:我們使用的iNand卡的版本號大於5,而uboot代碼本身不處理版本號大於5的卡,因此出錯了。
(3)解決方法就是修改uboot中的代碼,把判斷的5改成更大ls的數字。譬如8,然後跳過這個錯誤。
7.一些小問題的修補
7.1、控制台串口更換為串口0
//修改串口 smdkc110.h 文件
#define CONFIG_SERIAL2 1 /* we use UART2 on SMDKC110 */
7.2修改默認網絡地址設置
(1)修改配置頭文件smdkv210single.h中的CONFIG_IPADDR等宏,則可以修改uboot的默認環境變量。
(2)更改完成後如果環境變量還是原來的,正常。因為原來uboot執行過saveenv,因此環境變量已經被保存到iNand中的ENV分區中去了。uboot啟動後校驗時iNand的ENV分區中的環境變量是正確的,因此會優先加載。我們在uboot源代碼中修改的只是默認的環境變量。解決方案是擦除掉iNand中的那一份環境變量,然後迫使uboot啟動時使用uboot代碼中自帶的默認的這一份環境變量,就可以看到了。
(3)可以使用mmc write 0 30000000 11# 32(表示將DDR的0x30000000開頭的一段內存中的內容寫入iNand中的第17個扇區開始的32個扇區內,寫入長度是32個扇區長度(16KB))
在Android程序開發中,我們經常會去用到Shape這個東西去定義各種各樣的形狀,首先我們了解一下Shape下面有哪些標簽,都代表什麼意思: solid:填充 andr
字體圖標字體圖標是指將圖標做成字體文件(.ttf),從而代替傳統的png等圖標資源。使用字體圖標的優點和缺點分別為: 優點: &nbs
Android系統裡面有個東西很好用,也很常用,那就是Toast,但是長期使用也會發現,Toast有他的不足之處:形式單一,只有文字,風格不變等等,那麼要如
微信聊天時,突然發現自己的很多好友頭像都是透明的,感覺好高大上的樣子,微信透明頭像怎麼制作?下面小編就來告訴大家,感興趣的童鞋一起來看看吧!【微信透明頭像制