I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之u-boot移植
前段時間就開始學習I.MX6Q了,但是最近工作實在是忙,間斷了一些時間了。為了提高移植效率,還是考慮移植Freescale維護的3.10版本的核心。
原始碼獲取
Freescale維護的3.10的核心是使用git管理的,但是直接使用git下載程式碼會比較慢,下面是我下載好的uboot和kernel:
程式碼下載好後,先將u-boot解壓到工作目錄,然後在終端下切換到uboot根目錄。由於這個版本的bsp是使用git管理的,因此,需要切換到指定分支。執行指令:
- git branch -a
- git checkout -b tqimx6q imx_v2013.04_3.10.17_1.0.0_ga
U-Boot移植
新版U-Boot移植也不麻煩,主要是freescale給出了詳細的官方手冊"i.MX 6 BSP Porting Guide",具體的移植步驟如下:
Step1. 建立board目錄。由於imx6q的很多程式碼是共通的,跟之前的移植一樣,可以參考mx6qsabresd進行的,執行指令:
- cp board/freescale/mx6qsabresd/ board/freescale/mx6q_tqimx6q -r
Step2. 修改board相關檔案的名稱:
- cp board/freescale/mx6q_tqimx6q/mx6qsabresd.c board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c
Step4. 建立board配置檔案。同樣參考mx6qsabresd,執行如下指令:
- cp include/configs/mx6qsabresd.h include/configs/mx6q_tqimx6q.h
- mx6q_tqimx6q arm armv7 mx6q_tqimx6q freescale mx6
Step6. 定製DDR配置。其實DDR相關的引數在之前的移植文章中已經有了。
- cp board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg
然後修改檔案mx6q_tqimx6q_ddr.cfg,修改後的檔案內容如下:
- DATA 4, 0x020e0798, 0x000C0000
- DATA 4, 0x020e0758, 0x00000000
- DATA 4, 0x020e0588, 0x00000030
- DATA 4, 0x020e0594, 0x00000030
- DATA 4, 0x020e056c, 0x00000030
- DATA 4, 0x020e0578, 0x00000030
- DATA 4, 0x020e074c, 0x00000030
- DATA 4, 0x020e057c, 0x00000030
- DATA 4, 0x020e058c, 0x00000000
- DATA 4, 0x020e059c, 0x00000030
- DATA 4, 0x020e05a0, 0x00000030
- DATA 4, 0x020e078c, 0x00000030
- DATA 4, 0x020e0750, 0x00020000
- DATA 4, 0x020e05a8, 0x00000018
- DATA 4, 0x020e05b0, 0x00000018
- DATA 4, 0x020e0524, 0x00000018
- DATA 4, 0x020e051c, 0x00000018
- DATA 4, 0x020e0518, 0x00000018
- DATA 4, 0x020e050c, 0x00000018
- DATA 4, 0x020e05b8, 0x00000018
- DATA 4, 0x020e05c0, 0x00000018
- DATA 4, 0x020e0774, 0x00020000
- DATA 4, 0x020e0784, 0x00000018
- DATA 4, 0x020e0788, 0x00000018
- DATA 4, 0x020e0794, 0x00000018
- DATA 4, 0x020e079c, 0x00000018
- DATA 4, 0x020e07a0, 0x00000018
- DATA 4, 0x020e07a4, 0x00000018
- DATA 4, 0x020e07a8, 0x00000018
- DATA 4, 0x020e0748, 0x00000018
- DATA 4, 0x020e05ac, 0x00000018
- DATA 4, 0x020e05b4, 0x00000018
- DATA 4, 0x020e0528, 0x00000018
- DATA 4, 0x020e0520, 0x00000018
- DATA 4, 0x020e0514, 0x00000018
- DATA 4, 0x020e0510, 0x00000018
- DATA 4, 0x020e05bc, 0x00000018
- DATA 4, 0x020e05c4, 0x00000018
- DATA 4, 0x021b0800, 0xa1390003
- DATA 4, 0x021b080c, 0x001F001F
- DATA 4, 0x021b0810, 0x001F001F
- DATA 4, 0x021b480c, 0x001F001F
- DATA 4, 0x021b4810, 0x001F001F
- DATA 4, 0x021b083c, 0x43270338
- DATA 4, 0x021b0840, 0x03200314
- DATA 4, 0x021b483c, 0x431A032F
- DATA 4, 0x021b4840, 0x03200263
- DATA 4, 0x021b0848, 0x4B434748
- DATA 4, 0x021b4848, 0x4445404C
- DATA 4, 0x021b0850, 0x38444542
- DATA 4, 0x021b4850, 0x4935493A
- DATA 4, 0x021b081c, 0x33333333
- DATA 4, 0x021b0820, 0x33333333
- DATA 4, 0x021b0824, 0x33333333
- DATA 4, 0x021b0828, 0x33333333
- DATA 4, 0x021b481c, 0x33333333
- DATA 4, 0x021b4820, 0x33333333
- DATA 4, 0x021b4824, 0x33333333
- DATA 4, 0x021b4828, 0x33333333
- DATA 4, 0x021b08b8, 0x00000800
- DATA 4, 0x021b48b8, 0x00000800
- DATA 4, 0x021b0004, 0x00020036
- DATA 4, 0x021b0008, 0x09444040
- DATA 4, 0x021b000c, 0x8A8F7955
- DATA 4, 0x021b0010, 0xFF328F64
- DATA 4, 0x021b0014, 0x01FF00DB
- DATA 4, 0x021b0018, 0x00001740
- DATA 4, 0x021b001c, 0x00008000
- DATA 4, 0x021b002c, 0x000026d2
- DATA 4, 0x021b0030, 0x008F1023
- DATA 4, 0x021b0040, 0x00000047
- DATA 4, 0x021b0000, 0x841A0000
- DATA 4, 0x021b001c, 0x04088032
- DATA 4, 0x021b001c, 0x00008033
- DATA 4, 0x021b001c, 0x00048031
- DATA 4, 0x021b001c, 0x09408030
- DATA 4, 0x021b001c, 0x04008040
- DATA 4, 0x021b0020, 0x00005800
- DATA 4, 0x021b0818, 0x00011117
- DATA 4, 0x021b4818, 0x00011117
- DATA 4, 0x021b0004, 0x00025576
- DATA 4, 0x021b0404, 0x00011006
- DATA 4, 0x021b001c, 0x00000000
- /* set the default clock gate to save power */
- DATA 4, 0x020c4068, 0x00C03F3F
- DATA 4, 0x020c406c, 0x0030FC03
- DATA 4, 0x020c4070, 0x0FFFC000
- DATA 4, 0x020c4074, 0x3FF00000
- DATA 4, 0x020c4078, 0x00FFF300
- DATA 4, 0x020c407c, 0x0F0000F3
- DATA 4, 0x020c4080, 0x000003FF
- /* enable AXI cache for VDOA/VPU/IPU */
- DATA 4, 0x020e0010, 0xF00000CF
- /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
- DATA 4, 0x020e0018, 0x007F007F
- DATA 4, 0x020e001c, 0x007F007F
Step7. 定製board端子。其實有影響的端子在移植老版的uboot時已經知道,因此修改起來也是比較容易。
(1) 修改串列埠端子。具體修改內容如下:
- iomux_v3_cfg_t const uart1_pads[] = {
- // MX6_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
- MX6_PAD_SD3_DAT7__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
- // MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
- MX6_PAD_SD3_DAT6__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
- };
- iomux_v3_cfg_t const usdhc2_pads[] = {
- MX6_PAD_SD2_CLK__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD2_CMD__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD2_DAT0__USDHC2_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD2_DAT1__USDHC2_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD2_DAT2__USDHC2_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD2_DAT3__USDHC2_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_NANDF_D4__USDHC2_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_NANDF_D5__USDHC2_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_NANDF_D6__USDHC2_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_NANDF_D7__USDHC2_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_NANDF_D2__GPIO_2_2 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
- };
- iomux_v3_cfg_t const usdhc3_pads[] = {
- MX6_PAD_SD3_CLK__USDHC3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_CMD__USDHC3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- // MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
- MX6_PAD_NANDF_D0__GPIO_2_0 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
- };
定製cd(card detect)端子,否則uboot將檢測不到SD卡插入。開啟board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c修改USDHC2_CD_GPIO:
- #define USDHC2_CD_GPIO IMX_GPIO_NR(1, 4)
Step8. 編譯uboot。執行如下指令:
- export ARCH=arm
- export CROSS_COMPILE=arm-linux-gnueabi-
- make mx6q_tqimx6q
其中,CROSS_COMPILE是交叉編譯工具鏈的字首,根據自己的實際情況修改。如果前面的步驟操作正確,uboot就可以順利編譯通過了。
燒寫啟動
經過前面的移植工作,uboot已經可以正常執行在tqimx6q開發板上了。這個版本的uboot與之前版本的uboot編譯出的目標檔案不同,具體的燒寫指令如下:
- sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2
- U-Boot 2013.04-04987-g98fdbdc-dirty (May 01 2015 - 23:15:34)
- CPU: Freescale i.MX6Q rev1.2 at 792 MHz
- CPU: Temperature 24 C, calibration data: 0x54e4bb69
- Reset cause: POR
- Board: MX6Q/SDL-SabreSD
- I2C: ready
- DRAM: 1 GiB
- MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
- MMC: no card present
- MMC init failed
- Using default environment
- No panel detected: default to Hannstar-XGA
- Display: Hannstar-XGA (1024x768)
- In: serial
- Out: serial
- Err: serial
- MMC: no card present
- mmc0(part 0) is current device
- Net: Phy not found
- PHY reset timed out
- FEC [PRIME]
- Warning: failed to set MAC address
- Normal Boot
- Hit any key to stop autoboot: 0
- MMC: no card present
- mmc0(part 0) is current device
- MMC: no card present
- Booting from net ...
- *** ERROR: `ethaddr' not set
- *** ERROR: `ethaddr' not set
- Wrong Image Format for bootm command
- ERROR: can't get kernel image!
- U-Boot >
經過上文介紹的移植,u-boot已經可以正常啟動了。其實,這個版本的uboot移植與之前版本的uboot移植沒有太大區別,思路差不多。有什麼問題可以留言。
相關推薦
I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之u-boot移植
前段時間就開始學習I.MX6Q了,但是最近工作實在是忙,間斷了一些時間了。為了提高移植效率,還是考慮移植Freescale維護的3.10版本的核心。 原始碼獲取 Freescale維護的3.10的核心是使用git管理的,但是直接使用git下載程式碼會比較慢,下面是我下載好的
I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之觸控式螢幕驅動移植
之所以說是驅動移植是因為之前已經在TQ210、AM335x兩個平臺上移植過了,因此,僅需要少量修改就可以將驅動移植到imx6q。下面開始觸控驅動移植。 DTS編寫 參考其它DTS的i2c裝置寫法,我們可以新增如下內容: &i2c1 { clock-frequen
I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之KEY、LED
經過前面的移植,核心已經可以在tqimx6q上正常掛載根檔案系統了,接下來開始移植各類裝置驅動,本文先來移植按鍵和LED。之所以從按鍵和LED開始是因為這兩種裝置的驅動是最簡單的。 按鍵驅動移植 檢視tqimx6q的原理圖可知,這塊開發板有5個按鍵,其中,除了reset鍵之
I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之UART移植
我們在核心啟動時候已經配置系統了UART,但是tqimx6q這塊開發板上引出了imx6q的5路TTL介面,其中,uart1和uart2轉成232介面,本文將配置這5路Uart介面。 DTS配置 由於核心中已經有imx6q的uart控制器驅動,因此,我們只需要配置各埠的pin
I.MX6Q(TQIMX6Q/TQE9)學習筆記——U-Boot移植
其實Freescale的BSP移植文件已經將u-boot的移植步驟講述的非常詳細了,但為了以後方便查閱,還是按照自己的理解記錄在這裡。 獲取原始碼 根據前一篇文章搭建好LTIB環境後就可以非常方便的匯出u-boot原始碼了。切換到ltib目錄,並執行如下指令: ./l
I.MX6Q(TQIMX6Q/TQE9)學習筆記——核心啟動與檔案系統掛載
經過前面的移植,u-boot已經有能力啟動核心了,本文主要來看下如何通過之前移植的u-boot來啟動核心。如果按照前面的文章完成了LTIB的編譯,那麼,Linux的核心應該就會出現rpm/BUILD/目錄下,接下來,我們就開始移植這個3.0.35版本的核心到TQIMX6Q。
I.MX6Q(TQIMX6Q/TQE9)學習筆記——開發板的選擇
其實入手這塊TQIMX6Q的時候手頭上已經有一塊E9開發板了,但還是選擇了TQIMX6Q開發板,主要原因是個人感覺開發板更適合學習或研發,E9卡片電腦更適合應用,而且這兩款單板使用的是相同的晶片(Freescale的IMX6Q),因此,學習過程中還可以在開發板上實驗,然後在
Java學習筆記——設計模式之五.工廠方法
strong scanner multipl 石頭 simple 決定 定義 opera 下使用 水邊一只青蛙在笑 ——石頭和水 工廠方法模式(Factory Method),定義了一個用於創建對象的接口,讓實現類決定實例化哪一個類。工廠方法使一個類的實
Java學習筆記——設計模式之六.原型模式(淺克隆和深克隆)
catch 新的 att over 引用變量 col logs implement pri That there‘s some good in this world, Mr. Frodo. And it‘s worth fighting for. 原型模式(prot
Java學習筆記——設計模式之七.模板方法模式
tro mage emp java學習 java學習筆記 trac 子類 技術 primitive 模板方法模式(TemplateMethod),定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
Redis學習筆記04Redis命令之(3)服務器操作
毫秒 上下 set 文件描述符 mil 輸出鏈表 事件 客戶 moni 1.1.1. client list 列出所有客戶端連接信息。 每個連接使用一個id=xxx的行表示。 redis.coe2coe.me:6379> client list id=8 ad
Redis學習筆記06Redis命令之(5)事務
mman 客戶 cau 連接 discard 順序 strong 存在 執行命令 1.1.1. multi 開始一個新事務。 redis.coe2coe.me:6379> multi OK 執行此命令後,後面執行的set等命令將被緩存,直到被discard
【知了堂學習筆記】mysql之數據庫的增刪改查
into database uniq unique 大寫 spa 分享 incr int 一、DDL 1、創建數據庫 create database 數據庫名 *數據庫名不能中文, 不能數字正常英文 , 關鍵字會自動變大寫 2、刪除數據庫 drop datab
七、Hadoop學習筆記————調優之Hadoop參數調優
node 參數 受限 .com 資源 mage 預留空間 嘗試 nod dfs.datanode.handler.count默認為3,大集群可以調整為10 傳統MapReduce和yarn對比 如果服務器物理內存128G,則容器內存建議為100比較合理 配置總
八、Hadoop學習筆記————調優之Hive調優
需要 cnblogs log logs nbsp .cn 集中 bsp 9.png 表1表2的join和表3表4的join同時運行 此法需要關註是否有數據傾斜(大量數據集中在某一區間段) 八、Hadoop學習筆記————調優之Hive調優
學習筆記:設計模式之抽象工廠(C#)
sta 實體 mys actor div ted rac int c# 1.創建抽象工廠類 public abstract class AbstractFactory { public abstract Connect CreatConne
kvm虛擬化學習筆記(十四)之kvm虛擬機靜態遷移
虛擬主機 kvm 虛擬機遷移 kvm虛擬化 這裏提到的靜態遷移同是基於KVM虛擬主機之間的遷移,非異構虛擬化平臺的靜態遷移。1.靜態遷移就是虛擬機在關機狀態下,拷貝虛擬機虛擬磁盤文件與配置文件到目標虛擬主機中,實現的遷移。(1)虛擬主機各自使用本地存儲存放虛擬機磁盤文件本文實現基於本地磁盤存儲
kvm虛擬化學習筆記(十八)之ESXi到KVM之v2v遷移
虛擬化 kvm v2v kvm虛擬機遷移 1.ESXi到KVM之v2v情況說明(1).配置任務列表:1)VMwareESXi虛擬平臺下linux系統遷移到KVM虛擬平臺。2)VMwareESXi虛擬平臺下windows系統遷移到KVM虛擬平臺。提示:本文只介紹以上兩種遷移過程,KVM到ESXi
MYSQL 學習筆記記錄整理之二:分組數據
where 分組 學習 供應商 order by 記錄 price 需要 sele 1、創建分組 GROUP BY SELECT ven_id,COUNT(*) AS num_prods FROM products GROUP BY ven_id; 註意: GROUP BY
MYSQL 學習筆記記錄整理之三:子查詢
進行 測試 匹配 應該 因此 order 輸出 lec pro 1、利用子查詢進行過濾 eg:假如需要列出訂購物品TNT2的所有客戶,具體步驟: 檢索包含物品TNT2的所有訂單編號 檢索具有前一步驟列出的訂單編號的所有客戶的ID 檢索前一步驟返回的所有客戶ID的客戶信息 上