朱有鵬老師課堂筆記,從uboot官方移植到s5pv210上(二)
Board_init_f中呼叫:sequence
1.banner資訊補全:init_fnc_t *init_sequence[] 中 display_banner 在配置檔案中加CONFIG_IDENT_STRING 巨集定義,
2.#define CFG_PROMPT "x210 # "配置檔案中,uboot命令列提示符
3.int print_cpuinfo(void) 顯示時鐘資訊。
註釋掉原有函式內容,複製修改printf("\nCPU: [email protected]%ldMHz(ok)\n", get_ARMCLK()/1000000);
get_ARMCLK():需要修改成來的,需要移植時鐘初始化
(1)在lowlevel_init.S中移植system_clock_init函式,並且在s5p_goni.h中新增相關的巨集 定義引數,然後在lowlevel_init函式中呼叫system_clock_init函式。
board和DDR配置顯示移植
board名稱更改
2DDR配置值修改
MACH_TYPE定義
DDR列印資訊更改
進入board.c
checkboard--->goni.c中int checkboard(void)改board名
dram_init--->goni.c中int dram_init(void)刪掉PHYS_SDRAM_3_SIZE,並在gon.h
dram_init_banksize中修改
int board_init(void) 改機器碼
board_init_r中:
1.選擇MMC/SD模式:註釋掉配置檔案的關於預設onenand的巨集,新增開啟關於MMC的巨集CONFIG_GENERIC_MMC
2.goni資料夾中Makefile中去掉onenand.c依賴
3.根據報錯內容具體修改,至此,顯示MMC:但是有錯誤,需進行sd/mmc移植
移植sd卡驅動
1.分析兩個版本的uboot中SD卡驅動差異
(1)uboot2013.10中:驅動相關的檔案主要有:
drivers/mmc/mmc.c
drivers/mmc/sdhci.c
drivers/mmc/s5p_sdhci.c
board/samsung/goni/goni.c
(2)三星移植版本中,驅動相關的檔案主要有:
drivers/mmc/mmc.c
drivers/mmc/s3c_hsmmc.c
cpu/s5pc11x/cpu.c
cpu/s5pc11x/setup_hsmmc.c
(3)經過分析發現:SD卡驅動要工作要包含2部分內容,一部分是drivers/mmc目錄下的是驅動,另外一部分是uboot自己提供的初始化程式碼(譬如GPIO初始化、時鐘初始化)
2、複製必要的檔案並修改相應Makefile
(1)首先解決drivers/mmc目錄下的檔案替換。cpu/s5pc11x/setup_hsmmc.c放 在goni資料夾中,並Makefile新增依賴;cpu/s5pc11x/cpu.c待會進行部分移 植
(2)board_mmc_init或者cpu_mmc_init任選一個即可
弱名稱,如果沒有這個函式則講 __def_mmc_init 命名為前面的,返回-1;新建一個 board._mmc_init 呼叫初始化函式
(3)替換標頭檔案:mmc.h;s3c_hsmmc.h;(setup_hsmmc.c放在goni資料夾中 Makefile中新增setup_hsmmc.o檔案)
注意SI工具的同步。
(4)修改初始化程式碼。確保函式執行路線
(5)編譯,根據報錯資訊修改新增配置標頭檔案
cmd_mm.c替換。(驅動檔案換了對應的標頭檔案,命令檔案也要替換)
mmc_write.c 所在檔案中的Makefile中註釋掉,新的mmc.c不需要
Goni.c 和setup_hsmmc.c,註釋regs.h頭,包含s5p110.h, setup_hsmmc.c也要包含<sam/arch/clck.h>.
若編譯並燒錄完成,在uboot命令列下,用mmc,md等命令測試。
環境變數配置移植
(1)目前情況是uboot在SD2中,而ENV在SD0中,所以現在ENV不管放在哪個扇區都能工作,不會有問題。但是我們還是得找到ENV分割槽所在並且改到不會和uboot衝突,因為將來部署系統時我們會將uboot和kernel、rootfs等都燒錄到iNnand中去,那時候也要確保不會衝突。
(2)static inline int write_env(struct mmc *mmc, unsigned long size,
unsigned long offset, const void *buffer)
類似於這種函式,在程式碼分析中,關鍵是弄明白各種引數的意義。mmc表示要寫的mmc裝置,size表示要寫的大小,offset表示要寫到SD卡的哪個扇區去,buffer是要寫的內容。
(3)CONFIG_ENV_OFFSET這個巨集決定了我們的ENV在SD卡中相對SD卡扇區0的偏移量,也就是ENV寫到SD卡的哪裡去了。經過分析發現這個巨集的值為0.所以我們的ENV
被寫到了0扇區開始的32個扇區中。
(4)寫到這裡肯定不行,因為和uboot的BL1衝突了。解決方案是改變這個CONFIG_ENV_OFFSET的值,將ENV寫到別的空閒扇區去。
(5)#define MOVI_BL2_POS ((eFUSE_SIZE / MOVI_BLKSIZE) + MOVI_BL1_BLKCNT + MOVI_ENV_BLKCNT) 後面這三個其實分別是1+16+32=49
其中的1就是扇區0(空閒的),16是就是扇區1-16(uboot的BL1),32就是扇區17-48(存放ENV的),49自然就是uboot的BL2開始扇區了。這種安排是三星移植的uboot版本中推薦的SD卡的分割槽方式,不一定是唯一的。
(6)我們參考這個設計,即可實現環境變數不衝突。所以只要將ENV放到17扇區起始的地方即可
CONFIG_ENV_OFFSET 是什麼單位。扇區還是位元組等
測試環境變數的儲存是否正確
(1)程式修改重新編譯後啟動,啟動後要注意iNand中本來有沒有環境變數。為了保險起見對iNand的前49個扇區進行擦除,然後就可以確保裡面沒有之前儲存過的環境變量了。使用命令:mmc write 0 30000000 0# 49來擦除SD0的扇區0-48,保證以前的環境變數都沒有了。
(2)重新開機後先set隨便改一個環境變數作為標記然後saveenv然後重啟。
(3)測試方法是,使用:mmc read 0 30000000 17# 32命令將iNand的17開始的32個扇區讀出來到記憶體30000000處,然後md檢視。找到顯示區域裡面的各個環境變數,看讀出來的和自己剛才修改的值是否一樣。
常用環境變數的配置移植
(1)除掉用不要顯示的環境變數,常用的環境變數就是網路相關的那幾個,和CONFIG_BOOTCOMMAND、CONFIG_BOOTARGS等。
網絡卡驅動移植
1.檢視程式碼發現,本uboot沒有開啟網絡卡,須在配置檔案中開啟 #define CONFIG_CMD_NET
2.順便移植其他有關網絡卡的巨集,防止以後用到
3.新增ping,tftp命令。do_ping ;do_tftp 發現ping命令開關巨集為 CONFIG_CMD_PING,而tftp命令的開關為CONFIG_CMD_NET,確認新增
4.程式碼實踐。結果是ping和tftp命令都被識別了,但是都提示no ethernet found````` 網路不通。為什麼不通?因為還沒做初始化等移植
5.開始CONFIG_CMD_NET後執行eth_initialize(gd->bd)
同mmc時一樣新建board_eth_init函式呼叫dm9000x.c中的最後一個函式int dm9000_initialize(bd_t *bis),這個函式就是用來註冊dm9000網絡卡驅動的。新建
Int board_eth_init(bd_t *bis) 呼叫dm9000_initialize(bd_t *bis)
int board_eth_init(bd_t *bis)
{
return dm9000_initialize(bis);
}
6.編譯,並做相應修改
相關推薦
朱有鵬老師課堂筆記,從uboot官方移植到s5pv210上(二)
Board_init_f中呼叫:sequence 1.banner資訊補全:init_fnc_t *init_sequence[] 中 display_banner 在配置檔案中加CONFIG_IDENT_STRING 巨集定義, 2.#define CFG_PROMPT
朱有鵬C語言高階---4.9.4--單鏈表--頭結點(4)
朱有鵬C語言高階---4.9.4--單鏈表--頭結點(4) 連結串列還有另一種用法,就是把頭指標指向的第一個節點作為頭節點使用。頭結點的特點是:第一,它緊跟在頭指標後面。第二,頭結點的資料部分是空的(有時候不是空的,而是儲存整個連結串列的節點數),指標部分指向下一個節點,也就是
朱有鵬C語言高階---4.9.7--單鏈表--刪除節點(7)
朱有鵬C語言高階---4.9.7--單鏈表--刪除節點(7) (1)連結串列到底用來幹嘛的? 連結串列是用來存資料的,連結串列和陣列是一類東西!! (2)為什麼要刪除節點? 有時候連結串列節點中的資料不想要了,因此要刪除這個節點。 (3)刪除節點的2個步驟
朱有鵬C語言高階---4.9.8-單鏈表--逆序(單鏈表的完整程式)(8)
朱有鵬C語言高階---4.9.8-單鏈表--逆序(8) 什麼是連結串列的逆序? 連結串列的逆序又叫反向,意思就是把連結串列中所有的有效節點在連結串列中的順序給反過來。 單鏈表逆序演算法分析 (1)當我們對一個數據結構進行一個操作時,我們就需要一套演
性能測試從0到1的過程(二)
sleep efi python腳本 size sel 應用服務器 完全 展示 服務 本人,從畢業開始接觸測試,但是性能方面一無所知。之前在第一份工作,測過安卓客戶端,當時寫過一個非常簡單的shell腳本,push到手機系統內,用於手機硬件信息。但是在服務端的性能方面,
設計規範,你怎麽支持?(二)——靜態樣式支持
網上 lac 靜態 是我 web def 不支持 watch span 之前上一篇文章中講了我部門的設計要求統一設計規範,前端也打算同步提供對應的落地方案。下面我就講講我的第一步——靜態樣式支持。 一、前提條件——樣式預編譯化 在設計規範中有很大一部分是要求設計師對
VSIX項目,添加右鍵菜單(二)
ngs spa 等等 lag docs mage rom package val 1、新建VSIX項目後,裏邊基本什麽都沒有 項目上右擊,添加新建項 隨便起一個名字,例如我的是 RightCmd 2、裏邊有一個vsct的文件,這個文件相當於MVC裏的html,是用於配
AOP設計與原理(連線點,切入點與代理模式)——Spring AOP(二)
AOP設計與原理(連線點,切入點與代理模式) 上一章講了AOP的概念: 這一章換個角度講一下什麼是AOP,(本章屬於半轉載)。 java程式執行——方法呼叫 在學java基礎我們就知道,一個java程式總是從main方法開始執行的,當開始執行時JVM會建立一個主執行緒,
從零開始Vue專案實戰(二)-搭建環境
1、下載node.js並安裝 下載地址:https://nodejs.org/en/download/。 下載.msi 格式的直接連續下一步就可以了。安裝完成後可以用 node -v 和 npm -v 檢視版本號。 2、安裝vue-cli 腳手架構建工具 在命令列中輸入npm ins
從零開始學Socket:(二)連線服務端和客戶端
先了解一下執行緒問題,在Main函式裡就是主執行緒他能處理程式碼,而new Thread就是新開一個執行緒,他和主執行緒互不干預,但是主執行緒完了,他也完了。他完了,主執行緒沒事。 在上篇部落格裡,我們已經建立好了伺服器端和客戶端,但是他們倆還沒有聯絡,要把他們聯絡起來,就
【前端基礎筆記】——關於HTML標簽小知識(二)
nbsp 更新 點擊 name屬性 style con 最好 tex ble http-server 是一個簡單的零配置命令行HTTP服務器, 基於 nodeJs. 安裝-$ npm install http-server -g 開啟 http-server服務,終端進入目
python html抓取,並用re正則表示式解析(二)
需求: url: “http://search.jd.com/Search?keyword=幼貓貓糧&enc=utf-8#filter” 給出一個jd_search(keyword)方法,keyword為你要查詢的東西,比如:貓糧、手機,替換上面url中的keyword,得到一個新網
HTTP Server Mock 從手工到平臺的演變(二)
大家都知道,不管是 Web 系統、還是移動 APP,各自在與內部、外部系統之間進行資料互動時,大多數情況下都是依賴介面。在基於介面約定開發的模式下,依賴介面的產出時間如果延遲,將直接影響了整個研發除錯的效率;如果不能對介面進行及早測試,那發現問題的時間就要被推遲了。既然雙方約定了介面格式,為何不按照這個規
通過了解Servlet和Http之間的關係,瞭解web中http通訊使用(二)
注:圖片如果損壞,點選文章連結:https://www.toutiao.com/i6512399401825075719/ 上一節,簡單理解“請求服務”的內容:http協議中的請求,接下來我們再看下http協議中的響應 http協議中的響應 Http響應和Http請求一樣,也是有響應的格式 &
vue外掛開發流程詳解-從開發到釋出至npm(二)
前記:上一篇 https://www.cnblogs.com/adouwt/p/9211003.html,(這裡感謝部落格園的網友,給我點贊推薦了) 說到了一個完整的vue外掛開發、釋出的流程,總結下來就講了這麼一個事,如何注入vue, 如果封裝vue外掛,如何測試vue外掛,以及如何釋出vue外掛到np
讀書筆記《深入理解Java虛擬機器》 (二)物件建立、記憶體佈局、訪問定位
物件的建立 類載入檢查 檢查這個指令的引數是否能在常量池中定位到一個類的引用 檢查這個符號引用代表的類是否已被載入、解析和初始化過, 如果沒有,那必須先執行相應的類載入過程 確定物件所需記憶體的大小 為新生物件分配記憶體 初始化物件的欄位, 大
Kowala協議:一組分散式,自我調節,資產跟蹤特性的加密貨幣(二)
對於穩定幣來言,設計過程中會遇到很多細節的問題,今天來講述下有關通證設計過程中的一些問題。 1、計算手續費 計算費是交易費的一部分,轉移給kUSD礦工,並由以下公式決定: 其gasUsed(t) 是用於處理交易t的Gas,而gasPrice(t)是交易時的一個單位的
讀書筆記:Android中的程序間通訊(二)
閱讀的書籍:《Android開發藝術探索》 關鍵詞:Serializable,Parcelable,Serializable和Parcelable的區別,Binder Serializable介面:java提供的一個序列化介面,為物件提供標準的序列化和反序列化操作
【Java】模擬Sping,實現其IOC和AOP核心(二)
接著上一篇,在上一篇完成了有關IOC的註解實現,這一篇用XML的方式實現IOC,並且完成AOP。 簡易的IOC框圖 註解的方式實現了左邊的分支,那麼就剩下右邊的XML分支: XmlContext:這個類是也是AbstractApplicationContext的子類,和AnnotationContext
vue-admin 詳細註釋,必須手把手做專案系列之(二)
系列文章 [juejin.im/post/5c0e45…]vue-admin 詳細註釋,必須手把手做專案系列之(一) 麻雀雖小五臟俱全:[專案地址 github.com/whylisa/vue…) 前言 這兩天專案上線樓主要一大推的事要忙,要和產品撕逼,要和後臺討論一系列的問題要怎麼