Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
嵌入式平台移植技巧概說
盧釔辰
Joseph Lu
Outline
• Freescale iMX6 porting流程
• 基本硬體知識
• 如何從上百隻程式中,找出系統執行的第一支主程式
• 尋找uboot 主程式
• 尋找編譯器載入檔 .lds
• 由makefile搜尋
• 追蹤系統程式...
Freescale iMX6 porting 流程
• 我有整理資料如下,請自行參閱
https://hackpad.com/Freescale-iMX6-porting-EKoWlOejTiw
2016/3/9 joseph78715@gma...
基本硬體知識
• L1 Cache : 因為讀寫頻率極高,所以通常會採用速度較快的 SRAM
• L2 Cache , RAM : 因為成本考量,通常會使用讀寫速度較次一級的 DRAM
• Flash : 通常採用NAND Flash or N...
基本硬體知識
• 1st stage boot loader 只能放在不須初始化即可使用的儲存空間。E.g.
1. 有支援 Stepping–stone 的 NAND Flash
• Stepping–stone :
• 三星專利。上電時硬體電...
悲劇的嵌入式工程師
• 如果你覺得Uboot & kernel 的source code 動不動上千萬行,可能一輩子都看
不完
• 從 Linux kernel 4.1 以後,原始程式碼已衝到 2000 萬行的規模
• 而在u-boot & k...
千萬別這麼悲觀 , 因為 …
還有更可怕
更可怕
更可怕 的挑戰在等你
2016/3/9 joseph78715@gmail.com 7
更可怕的是…
在 OS sorce code 裡,不是每一行程式都會被編譯,而編譯了也不一定被連結,
連結了不一定被執行。
若沒搞清楚狀況,可能 trace 了好幾天的程式碼後,才發現該段程式碼根本
不會被執行,所以看了等於白看、改了等於白改 ...
所以,如何從上千個檔案中,找出系統所
執行的第一個函式所在位置呢?
• 以尋找uboot 執行的第一支函式為例
 Sol 1 : 尋找編譯器載入檔 .lds
/board/$5/$4/u-boot.lds
cpu/$3/start.S
 S...
追蹤系統程式碼常用指令與技巧 (1/2)
• 欲搜尋Uboot執行第一支程式,可由找到編譯器載入程式 . lds 檔下手
• 做嵌入式要習慣隨便一找就找出幾百個同名檔案,此時就要依系統架構去判
斷,到底哪個才是你要用的
2016/3/9 jos...
追蹤系統程式碼常用指令與技巧 (2/2)
• Q : 想找某個變數在source code的哪些檔案的哪裡有出現?
• Ans : 請用正規表達式(Global Regular Expression) grep 搜尋。
2016/3/9 jos...
U-Boot 流程概述
• 切入 SVC 模式
• 只有svc mode可以修改硬體參數。進user mode ( kernel跑起來後 ) 就無法對硬體設定做修改
• 清除 I-Cache / D-Cache
• 為 MMU 相關暫存器設定初...
其餘工具介紹
• 程式除錯工具GDB & CGDB
• 我有整理資料如下,請自行參閱
https://hackpad.com/GDB-CGDB-7dUwpX8os7U
• 版本控制 Git
• 我有整理資料如下,請自行參閱
https://ha...
參考資料
• U-Boot 簡明概要
• http://teacherchi.tumblr.com/post/20112222844/u-boot-
%E7%B0%A1%E6%98%8E%E6%A6%82%E8%A6%81
2016/3/9 j...
Prochain SlideShare
Chargement dans…5
×

嵌入式平台移植技巧概說

6 907 vues

Publié le

Port Embedded Linux

Publié dans : Ingénierie
  • Soyez le premier à commenter

嵌入式平台移植技巧概說

  1. 1. 嵌入式平台移植技巧概說 盧釔辰 Joseph Lu
  2. 2. Outline • Freescale iMX6 porting流程 • 基本硬體知識 • 如何從上百隻程式中,找出系統執行的第一支主程式 • 尋找uboot 主程式 • 尋找編譯器載入檔 .lds • 由makefile搜尋 • 追蹤系統程式碼常用指令與技巧 • U-Boot 流程概述 • 其餘工具介紹 2016/3/9 joseph78715@gmail.com 2
  3. 3. Freescale iMX6 porting 流程 • 我有整理資料如下,請自行參閱 https://hackpad.com/Freescale-iMX6-porting-EKoWlOejTiw 2016/3/9 joseph78715@gmail.com 3
  4. 4. 基本硬體知識 • L1 Cache : 因為讀寫頻率極高,所以通常會採用速度較快的 SRAM • L2 Cache , RAM : 因為成本考量,通常會使用讀寫速度較次一級的 DRAM • Flash : 通常採用NAND Flash or NOR Flash • NAND Flash 需要初始化 ( 不可放uboot 程式 ,除非支援Stepping–stone ) ,且速度較慢但便宜 • NOR Flash 不須初始化 ( 可放uboot 程式 ),速度較快 P.S. 我們常聽到的記憶體(memory ) , 其實是 Cache , RAM 的統稱 2016/3/9 4 速度比較 : SRAM > DRAM > > NOR Flash > NAND Flash 價格比較 : SRAM > DRAM > > NOR Flash > NAND Flash
  5. 5. 基本硬體知識 • 1st stage boot loader 只能放在不須初始化即可使用的儲存空間。E.g. 1. 有支援 Stepping–stone 的 NAND Flash • Stepping–stone : • 三星專利。上電時硬體電路會抓取 NAND Flash 的前 128k ( 每顆 NAND 支援大小不一定 ), 放進 SRAM 中執行。 • 只要你的 uboot 程式有辦法在 128k 內完成 CPU , Memory 以及 NAND Flash 初始化 ,就可 以利用NAND Flash 開機 。 • 也因為 Stepping–stone 技術的出現,讓開發商不用特地買一塊貴貴小小的 NOR Flash 放 Bootloader 程式,而可以全部改用便宜的 NAND Flash 取代。 2. NOR Flash : • NOR Flash 可以和 CPU pin-to-pin ,支援 XIP ( Execute in place )。不須初始化即可使用 2016/3/9 joseph78715@gmail.com 5
  6. 6. 悲劇的嵌入式工程師 • 如果你覺得Uboot & kernel 的source code 動不動上千萬行,可能一輩子都看 不完 • 從 Linux kernel 4.1 以後,原始程式碼已衝到 2000 萬行的規模 • 而在u-boot & kernel 程式碼都沒 trace 完一遍的情形下,上司又要你在有限時 間內把OS porting 上去,根本超級悲慘兼毫無人性 時間就是金錢! 這是一個什麼都趕的時代 老闆趕出貨 , PM趕結案 , 於是 工程師趕羚羊 2016/3/9 joseph78715@gmail.com 6
  7. 7. 千萬別這麼悲觀 , 因為 … 還有更可怕 更可怕 更可怕 的挑戰在等你 2016/3/9 joseph78715@gmail.com 7
  8. 8. 更可怕的是… 在 OS sorce code 裡,不是每一行程式都會被編譯,而編譯了也不一定被連結, 連結了不一定被執行。 若沒搞清楚狀況,可能 trace 了好幾天的程式碼後,才發現該段程式碼根本 不會被執行,所以看了等於白看、改了等於白改 , … 2016/3/9 joseph78715@gmail.com 8
  9. 9. 所以,如何從上千個檔案中,找出系統所 執行的第一個函式所在位置呢? • 以尋找uboot 執行的第一支函式為例  Sol 1 : 尋找編譯器載入檔 .lds /board/$5/$4/u-boot.lds cpu/$3/start.S  Sol 2 : 由晶片商所提供的編譯 Uboot 的 makefile 中尋找 • 當我們找出第一個被執行的函式所在檔案,就可以順藤摸瓜找出系統會執行的第2 支、第3支被執行的函式,依序追蹤下去 2016/3/9 joseph78715@gmail.com 9
  10. 10. 追蹤系統程式碼常用指令與技巧 (1/2) • 欲搜尋Uboot執行第一支程式,可由找到編譯器載入程式 . lds 檔下手 • 做嵌入式要習慣隨便一找就找出幾百個同名檔案,此時就要依系統架構去判 斷,到底哪個才是你要用的 2016/3/9 joseph78715@gmail.com 10
  11. 11. 追蹤系統程式碼常用指令與技巧 (2/2) • Q : 想找某個變數在source code的哪些檔案的哪裡有出現? • Ans : 請用正規表達式(Global Regular Expression) grep 搜尋。 2016/3/9 joseph78715@gmail.com 11
  12. 12. U-Boot 流程概述 • 切入 SVC 模式 • 只有svc mode可以修改硬體參數。進user mode ( kernel跑起來後 ) 就無法對硬體設定做修改 • 清除 I-Cache / D-Cache • 為 MMU 相關暫存器設定初值 • 設定 peripheral bus 起點 • 初始化 CPU ( 設定 PLL ) 與記憶體 ( 設定 Tacc , Tacp ,... ) • 偵測 U-Boot 是放在NAND or NOR Flash • 若放在NAND 則須將剩下的uboot程式copy到DRAM執行 • 若放在NOR 則不須複製到RAM,可直接執行。但一般為了效能考量仍會複製到RAM中 執行 • 初始化 MMU • 初始化堆疊區 • 初始化 BSS 區 • 跳入第二階段的 start_armboot() 函數 : • 跳離此處便不再回來,至此由ARM組語變為 C語言執行 2016/3/9 joseph78715@gmail.com 12
  13. 13. 其餘工具介紹 • 程式除錯工具GDB & CGDB • 我有整理資料如下,請自行參閱 https://hackpad.com/GDB-CGDB-7dUwpX8os7U • 版本控制 Git • 我有整理資料如下,請自行參閱 https://hackpad.com/Git-SVKqwqVxUNQ 2016/3/9 joseph78715@gmail.com 13
  14. 14. 參考資料 • U-Boot 簡明概要 • http://teacherchi.tumblr.com/post/20112222844/u-boot- %E7%B0%A1%E6%98%8E%E6%A6%82%E8%A6%81 2016/3/9 joseph78715@gmail.com 14

×