1. 程式人生 > >I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之u-boot移植

I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之u-boot移植

前段時間就開始學習I.MX6Q了,但是最近工作實在是忙,間斷了一些時間了。為了提高移植效率,還是考慮移植Freescale維護的3.10版本的核心。

原始碼獲取

Freescale維護的3.10的核心是使用git管理的,但是直接使用git下載程式碼會比較慢,下面是我下載好的uboot和kernel:

程式碼下載好後,先將u-boot解壓到工作目錄,然後在終端下切換到uboot根目錄。由於這個版本的bsp是使用git管理的,因此,需要切換到指定分支。執行指令:

  1. git branch -a  
可以檢視freescale維護的uboot的各個分支,我們checkout的分支是“remotes/origin/imx_v2013.04_3.10.17_1.0.0_ga”,執行指令:
  1. git checkout -b tqimx6q imx_v2013.04_3.10.17_1.0.0_ga  
這樣,就在本地建立的分支tqimx6q並將遠端分支imx_v2013.04_3.10.17_1.0.0_ga上的程式碼checkout到這個本地分支。我們之後的修改在tqimx6q分支進行即可。

U-Boot移植

新版U-Boot移植也不麻煩,主要是freescale給出了詳細的官方手冊"i.MX 6 BSP Porting Guide",具體的移植步驟如下:

Step1. 建立board目錄。由於imx6q的很多程式碼是共通的,跟之前的移植一樣,可以參考mx6qsabresd進行的,執行指令:

  1. cp board/freescale/mx6qsabresd/ board/freescale/mx6q_tqimx6q -r  

Step2. 修改board相關檔案的名稱:

  1. cp board/freescale/mx6q_tqimx6q/mx6qsabresd.c board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c  
Step3. 修改Makefile中的檔名。開啟board/freescale/Makefile,將mx6qsabresd替換為mx6q_tqimx6q.c。
Step4. 建立board配置檔案。同樣參考mx6qsabresd,執行如下指令:
  1. cp include/configs/mx6qsabresd.h include/configs/mx6q_tqimx6q.h  
Step5. 新增編譯選項。開啟檔案boards.cfg,找到配置項"mx6qsabresd"(如果沒有改動的話,在277行),複製該行配置並新增在下面,然後修改為如下內容:
  1. mx6q_tqimx6q                 arm         armv7       mx6q_tqimx6q        freescale      mx6             
    mx6qsabresd:IMX_CONFIG=board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg,MX6Q,DEFAULT_FDT_FILE="imx6q-tqimx6q.dtb",DDR_MB=1024,SYS_USE_SPINOR  

Step6. 定製DDR配置。其實DDR相關的引數在之前的移植文章中已經有了。

  1. cp board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg  

然後修改檔案mx6q_tqimx6q_ddr.cfg,修改後的檔案內容如下:

  1. DATA 4, 0x020e0798, 0x000C0000  
  2. DATA 4, 0x020e0758, 0x00000000  
  3. DATA 4, 0x020e0588, 0x00000030  
  4. DATA 4, 0x020e0594, 0x00000030  
  5. DATA 4, 0x020e056c, 0x00000030  
  6. DATA 4, 0x020e0578, 0x00000030  
  7. DATA 4, 0x020e074c, 0x00000030  
  8. DATA 4, 0x020e057c, 0x00000030  
  9. DATA 4, 0x020e058c, 0x00000000  
  10. DATA 4, 0x020e059c, 0x00000030  
  11. DATA 4, 0x020e05a0, 0x00000030  
  12. DATA 4, 0x020e078c, 0x00000030  
  13. DATA 4, 0x020e0750, 0x00020000  
  14. DATA 4, 0x020e05a8, 0x00000018  
  15. DATA 4, 0x020e05b0, 0x00000018  
  16. DATA 4, 0x020e0524, 0x00000018  
  17. DATA 4, 0x020e051c, 0x00000018  
  18. DATA 4, 0x020e0518, 0x00000018  
  19. DATA 4, 0x020e050c, 0x00000018  
  20. DATA 4, 0x020e05b8, 0x00000018  
  21. DATA 4, 0x020e05c0, 0x00000018  
  22. DATA 4, 0x020e0774, 0x00020000  
  23. DATA 4, 0x020e0784, 0x00000018  
  24. DATA 4, 0x020e0788, 0x00000018  
  25. DATA 4, 0x020e0794, 0x00000018  
  26. DATA 4, 0x020e079c, 0x00000018  
  27. DATA 4, 0x020e07a0, 0x00000018  
  28. DATA 4, 0x020e07a4, 0x00000018  
  29. DATA 4, 0x020e07a8, 0x00000018  
  30. DATA 4, 0x020e0748, 0x00000018  
  31. DATA 4, 0x020e05ac, 0x00000018  
  32. DATA 4, 0x020e05b4, 0x00000018  
  33. DATA 4, 0x020e0528, 0x00000018  
  34. DATA 4, 0x020e0520, 0x00000018  
  35. DATA 4, 0x020e0514, 0x00000018  
  36. DATA 4, 0x020e0510, 0x00000018  
  37. DATA 4, 0x020e05bc, 0x00000018  
  38. DATA 4, 0x020e05c4, 0x00000018  
  39. DATA 4, 0x021b0800, 0xa1390003  
  40. DATA 4, 0x021b080c, 0x001F001F  
  41. DATA 4, 0x021b0810, 0x001F001F  
  42. DATA 4, 0x021b480c, 0x001F001F  
  43. DATA 4, 0x021b4810, 0x001F001F  
  44. DATA 4, 0x021b083c, 0x43270338  
  45. DATA 4, 0x021b0840, 0x03200314  
  46. DATA 4, 0x021b483c, 0x431A032F  
  47. DATA 4, 0x021b4840, 0x03200263  
  48. DATA 4, 0x021b0848, 0x4B434748  
  49. DATA 4, 0x021b4848, 0x4445404C  
  50. DATA 4, 0x021b0850, 0x38444542  
  51. DATA 4, 0x021b4850, 0x4935493A  
  52. DATA 4, 0x021b081c, 0x33333333  
  53. DATA 4, 0x021b0820, 0x33333333  
  54. DATA 4, 0x021b0824, 0x33333333  
  55. DATA 4, 0x021b0828, 0x33333333  
  56. DATA 4, 0x021b481c, 0x33333333  
  57. DATA 4, 0x021b4820, 0x33333333  
  58. DATA 4, 0x021b4824, 0x33333333  
  59. DATA 4, 0x021b4828, 0x33333333  
  60. DATA 4, 0x021b08b8, 0x00000800  
  61. DATA 4, 0x021b48b8, 0x00000800  
  62. DATA 4, 0x021b0004, 0x00020036  
  63. DATA 4, 0x021b0008, 0x09444040  
  64. DATA 4, 0x021b000c, 0x8A8F7955  
  65. DATA 4, 0x021b0010, 0xFF328F64  
  66. DATA 4, 0x021b0014, 0x01FF00DB  
  67. DATA 4, 0x021b0018, 0x00001740  
  68. DATA 4, 0x021b001c, 0x00008000  
  69. DATA 4, 0x021b002c, 0x000026d2  
  70. DATA 4, 0x021b0030, 0x008F1023  
  71. DATA 4, 0x021b0040, 0x00000047  
  72. DATA 4, 0x021b0000, 0x841A0000  
  73. DATA 4, 0x021b001c, 0x04088032  
  74. DATA 4, 0x021b001c, 0x00008033  
  75. DATA 4, 0x021b001c, 0x00048031  
  76. DATA 4, 0x021b001c, 0x09408030  
  77. DATA 4, 0x021b001c, 0x04008040  
  78. DATA 4, 0x021b0020, 0x00005800  
  79. DATA 4, 0x021b0818, 0x00011117  
  80. DATA 4, 0x021b4818, 0x00011117  
  81. DATA 4, 0x021b0004, 0x00025576  
  82. DATA 4, 0x021b0404, 0x00011006  
  83. DATA 4, 0x021b001c, 0x00000000  
  84. /* set the default clock gate to save power */
  85. DATA 4, 0x020c4068, 0x00C03F3F  
  86. DATA 4, 0x020c406c, 0x0030FC03  
  87. DATA 4, 0x020c4070, 0x0FFFC000  
  88. DATA 4, 0x020c4074, 0x3FF00000  
  89. DATA 4, 0x020c4078, 0x00FFF300  
  90. DATA 4, 0x020c407c, 0x0F0000F3  
  91. DATA 4, 0x020c4080, 0x000003FF  
  92. /* enable AXI cache for VDOA/VPU/IPU */
  93. DATA 4, 0x020e0010, 0xF00000CF  
  94. /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
  95. DATA 4, 0x020e0018, 0x007F007F  
  96. DATA 4, 0x020e001c, 0x007F007F  

Step7. 定製board端子。其實有影響的端子在移植老版的uboot時已經知道,因此修改起來也是比較容易。

(1) 修改串列埠端子。具體修改內容如下:

  1. iomux_v3_cfg_t const uart1_pads[] = {  
  2.         // MX6_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),  
  3.         MX6_PAD_SD3_DAT7__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),  
  4.         // MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),  
  5.         MX6_PAD_SD3_DAT6__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),  
  6. };  
(2) 修改SD卡端子。具體修改如下:
  1. iomux_v3_cfg_t const usdhc2_pads[] = {  
  2.         MX6_PAD_SD2_CLK__USDHC2_CLK     | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  3.         MX6_PAD_SD2_CMD__USDHC2_CMD     | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  4.         MX6_PAD_SD2_DAT0__USDHC2_DAT0   | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  5.         MX6_PAD_SD2_DAT1__USDHC2_DAT1   | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  6.         MX6_PAD_SD2_DAT2__USDHC2_DAT2   | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  7.         MX6_PAD_SD2_DAT3__USDHC2_DAT3   | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  8.         // MX6_PAD_NANDF_D4__USDHC2_DAT4        | MUX_PAD_CTRL(USDHC_PAD_CTRL),
  9.         // MX6_PAD_NANDF_D5__USDHC2_DAT5        | MUX_PAD_CTRL(USDHC_PAD_CTRL),
  10.         // MX6_PAD_NANDF_D6__USDHC2_DAT6        | MUX_PAD_CTRL(USDHC_PAD_CTRL),
  11.         // MX6_PAD_NANDF_D7__USDHC2_DAT7        | MUX_PAD_CTRL(USDHC_PAD_CTRL),
  12.         // MX6_PAD_NANDF_D2__GPIO_2_2   | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
  13. };  
  14. iomux_v3_cfg_t const usdhc3_pads[] = {  
  15.         MX6_PAD_SD3_CLK__USDHC3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  16.         MX6_PAD_SD3_CMD__USDHC3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  17.         MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  18.         MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  19.         MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  20.         MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  21.         MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  22.         MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  23.         // MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
  24.         // MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
  25.         MX6_PAD_NANDF_D0__GPIO_2_0    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
  26. };  

定製cd(card detect)端子,否則uboot將檢測不到SD卡插入。開啟board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c修改USDHC2_CD_GPIO:

  1. #define USDHC2_CD_GPIO  IMX_GPIO_NR(1, 4)

Step8. 編譯uboot。執行如下指令:
  1. export ARCH=arm
  2. export CROSS_COMPILE=arm-linux-gnueabi-  
  3. make mx6q_tqimx6q  

其中,CROSS_COMPILE是交叉編譯工具鏈的字首,根據自己的實際情況修改。如果前面的步驟操作正確,uboot就可以順利編譯通過了。

燒寫啟動

經過前面的移植工作,uboot已經可以正常執行在tqimx6q開發板上了。這個版本的uboot與之前版本的uboot編譯出的目標檔案不同,具體的燒寫指令如下:

  1. sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2  
啟動Log如下:
  1. U-Boot 2013.04-04987-g98fdbdc-dirty (May 01 2015 - 23:15:34)  
  2. CPU:   Freescale i.MX6Q rev1.2 at 792 MHz  
  3. CPU:   Temperature 24 C, calibration data: 0x54e4bb69  
  4. Reset cause: POR  
  5. Board: MX6Q/SDL-SabreSD  
  6. I2C:   ready  
  7. DRAM:  1 GiB  
  8. MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2  
  9. MMC: no card present  
  10. MMC init failed  
  11. Using default environment  
  12. No panel detected: default to Hannstar-XGA  
  13. Display: Hannstar-XGA (1024x768)  
  14. In:    serial  
  15. Out:   serial  
  16. Err:   serial  
  17. MMC: no card present  
  18. mmc0(part 0) is current device  
  19. Net:   Phy not found  
  20. PHY reset timed out  
  21. FEC [PRIME]  
  22. Warning: failed to set MAC address  
  23. Normal Boot  
  24. Hit any key to stop autoboot:  0   
  25. MMC: no card present  
  26. mmc0(part 0) is current device  
  27. MMC: no card present  
  28. Booting from net ...  
  29. *** ERROR: `ethaddr' not set  
  30. *** ERROR: `ethaddr' not set  
  31. Wrong Image Format for bootm command  
  32. ERROR: can't get kernel image!  
  33. U-Boot >   
總結
經過上文介紹的移植,u-boot已經可以正常啟動了。其實,這個版本的uboot移植與之前版本的uboot移植沒有太大區別,思路差不多。有什麼問題可以留言。

相關推薦

I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSPu-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)學習筆記——新版BSPKEY、LED

經過前面的移植,核心已經可以在tqimx6q上正常掛載根檔案系統了,接下來開始移植各類裝置驅動,本文先來移植按鍵和LED。之所以從按鍵和LED開始是因為這兩種裝置的驅動是最簡單的。 按鍵驅動移植 檢視tqimx6q的原理圖可知,這塊開發板有5個按鍵,其中,除了reset鍵之

I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSPUART移植

我們在核心啟動時候已經配置系統了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到KVMv2v遷移

虛擬化 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的客戶信息 上