- CPU是何種ARM core, 例如arm926, 是V5, V6還是V7等等
- SoC多少週邊元件在這顆Embedded ARM CPU之內
- interrupt如何設定及使用, 這裏所指的是interrupt controller
- timer如何設定及使用
- DRAM & Flash mapping至CPU那個位置
收集這些資訊之後, 開始要做Linux kernel porting的工作, 以下是它的工作步驟
- 修改源始碼根目錄的Makefile, 將其中幾個變數做修改如下
CROSS_COMPILE := arm-linux-gnueabi
INSTALL_MOD_PATH := `pwd`/installed_modules
- 在arch/arm目錄之下建立一個子目錄其名字為mach-開頭, 之後你可以取一個名字, 例如mach-victorcpu, 而在這目錄下的程式皆為HAL層的程式碼
- 在arch/arm/tools目錄之下有一個文字檔 "mach-types" , 仿照其它CPU的寫法, 你必須定一個ID號碼, 必須是唯一的。
- 在你建立的mach-victorcpu目錄建立Makefile & Kconfig, 並將你建立的Kconfig檔加入至arch/arm/Kconfig的include之中
- 在新建mach-victorcpu的新目錄中, 必須幾個檔案而其內容如下:
- MACHINE_DESCRIPTION
- interrupt controller initialization
- timer controller initialization
- mapping fixed some SoC address to be virtual address, 有些SoC的元件在開機就必須使用到的, 就需要使用事先定對好的方式來設定, 例如timer
- 若有PCI host, 則必須撰寫其HAL層在此, 而PCI BUS Driver則會在driver/pci的目錄中, 不用撰寫。
- 若在cahce操作部若有和ARM的標準不同, 則必需撰寫其差異部分的程式在arch/arm/mm的目錄之下。
- 接下來必需要開始撰寫各個SoC進來元件的device driver, 你要依照硬體的設計來撰寫個別device driver。
沒有留言:
張貼留言