龍芯Linux內(nèi)核移植和優(yōu)化_第1頁
龍芯Linux內(nèi)核移植和優(yōu)化_第2頁
龍芯Linux內(nèi)核移植和優(yōu)化_第3頁
龍芯Linux內(nèi)核移植和優(yōu)化_第4頁
龍芯Linux內(nèi)核移植和優(yōu)化_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、,龍芯Linux內(nèi)核移植和優(yōu)化,張福新 江蘇中科龍夢科技有限公司 中科院計(jì)算所 2008.10.20,內(nèi)容提要,準(zhǔn)備工作 移植步驟 性能優(yōu)化案例,準(zhǔn)備工作,打好基礎(chǔ) 學(xué)習(xí)C編程,大致了解MIPS匯編 掌握操作系統(tǒng)的基本概念:中斷,進(jìn)程,內(nèi)存管理等 學(xué)習(xí)配置和編譯內(nèi)核 獲得和熟悉龍芯硬件平臺(tái) 閱讀龍芯處理器手冊 閱讀相關(guān)平臺(tái)的主板手冊 準(zhǔn)備編譯環(huán)境 交叉編譯 本地編譯 取得內(nèi)核源代碼,準(zhǔn)備工作參考資源,龍芯相關(guān): 中科龍夢, 龍芯技術(shù)服務(wù)中心: Linux/MIPS資源 內(nèi)核代碼、工具鏈、模擬器和各類文檔,參考平臺(tái),我們就以目前放PPT的這臺(tái)龍芯筆記本的內(nèi)核

2、開發(fā)為例,移植步驟,試通我們的開發(fā)環(huán)境 添加代碼 編譯第一個(gè)龍芯內(nèi)核并用早期的printk輸出內(nèi)核信息 Kgdb CPU支持 主板相關(guān)支持 PCI子系統(tǒng) 驅(qū)動(dòng)程序 調(diào)試,調(diào)試,調(diào)試,再調(diào)試,試通開發(fā)環(huán)境,我們采用串口來作為調(diào)試信息窗口 本主板預(yù)留串口接口 串口簡單、容易獲得,適合做調(diào)試界面 串口設(shè)置 終端仿真程序:minicom(Linux),hyperterm(windows) 端口設(shè)置,波特率,奇偶校驗(yàn),流控等設(shè)置:龍芯PMON缺省設(shè)置115200 8N1 連接龍芯筆記本主板和調(diào)試主機(jī) 啟動(dòng) 應(yīng)該能夠看到PMON啟動(dòng)信息 可進(jìn)入PMON命令行進(jìn)行各項(xiàng)操作,添加代碼,代碼位置 需要添加的代碼

3、包括板級(jí)支持、驅(qū)動(dòng)和一些與系統(tǒng)接口的添加信息。板極支持代碼按照習(xí)慣應(yīng)該放在arch/mips目錄下,驅(qū)動(dòng)應(yīng)該在driver/目錄下,接口代碼主要在include/asm-mips和arch/mips下 建立arch/mips/lemote目錄,添加代碼(續(xù)),arch/mips/lemote 提供主板相關(guān)的中斷分派,PMON接口,時(shí)鐘,IO,內(nèi)存等平臺(tái)相關(guān)資源設(shè)置 Linux-2.6.23中,需要實(shí)現(xiàn)的接口如下: PMON相關(guān):prom_init, prom_putchar 中斷相關(guān):plat_irq_dispatch,arch_init_irq 資源設(shè)置:plat_mem_setup,pla

4、t_timer_setup,pcibios_init,set_io_port_base, get_system_type,_machine_restart,_machine_halt,pm_power_off, board_time_init, mips_rtc_get_time, _wbflush等,添加代碼(續(xù)),和linux/mips內(nèi)核集成 Include/asm-mips/cpu.h,module.h,chacheops.h,bootinfo.h:龍芯相關(guān)宏定義 include/asm-mips/mach-lemote/dma-coherency.h, mc146818rtc.h:由

5、于平臺(tái)特殊行,需要覆蓋mach-generic的內(nèi)容 Arch/mips/kernel/cpu-info.c:添加龍芯CPU處理代碼 Arch/mips/kernel/proc.c:把機(jī)器組名字添加到mach_group_to_name數(shù)組 Arch/mips/kernel/Makefile: 根據(jù)config把龍芯CPU需要用的存儲(chǔ)管理模塊選上 Arch/mips/Makefile: 增加一節(jié)把新增的代碼代碼鏈進(jìn)去 Arch/mips/Kconfig: 添加必要的配置選項(xiàng),Makefile修改樣例,# # lemote fulong mini-PC board # core-$(CONFIG

6、_LEMOTE_FULONG) +=arch/mips/lemote/lm2e/ load-$(CONFIG_LEMOTE_FULONG) +=0 xffffffff80100000 cflags-$(CONFIG_LEMOTE_FULONG) += -Iinclude/asm-mips/mach-lemote,Kconfig修改,加一個(gè)CPU節(jié),一個(gè)平臺(tái)節(jié) config CPU_LOONGSON2 bool Loongson 2 depends on SYS_HAS_CPU_LOONGSON2 select CPU_SUPPORTS_32BIT_KERNEL select CPU_SUPPO

7、RTS_64BIT_KERNEL select CPU_SUPPORTS_HIGHMEM help The Loongson 2E processor implements the MIPS III instruction set with many extensions.,Kconfig修改,config LEMOTE_FULONG bool Lemote Fulong mini-PC select ARCH_SPARSEMEM_ENABLE . select CPU_HAS_WB select GENERIC_ISA_DMA_SUPPORT_BROKEN help Lemote Fulon

8、g mini-PC board based on the Chinese Loongson-2E CPU and a FPGA northbridge,配置和編譯內(nèi)核,選擇LEMOTE_FULONGG板,別選其它任何板 選擇LOONGSON2 CPU 選擇character devices下的串口設(shè)備和串口控制臺(tái)支持,別選virtual console支持 在kernel hacking下選擇cross-compilation 其它選項(xiàng)要么缺省,要么選擇no 檢查交叉編譯工具路徑和Makefile。make dep; make,早期的printk,終端設(shè)備初始化太遲 簡單的串口輸出prom_p

9、rintf,串口驅(qū)動(dòng)和控制臺(tái),Prom_printf不能滿足要求(中斷方式) 添加串口支持的兩種方式: 靜態(tài)定義 include/asm/serial.h 2.6.23廢止,可采用platform_device方式 運(yùn)行時(shí)設(shè)置 串口參數(shù)(標(biāo)準(zhǔn)串口): Io_type: SERIAL_IO_MEM memory mapped方式(writeb,readb)訪問. Iomem_base + shifted offset SERIAL_IO_PORT inb,outb訪問. 非標(biāo)準(zhǔn)串口,可參照drivers/char/generic_serial.c,KGDB-內(nèi)核調(diào)試 支持代碼: putDebug

10、Char,getDebugChar 使用: 選擇kernel hacking下的CONFIG_REMOTE_DEBUG 準(zhǔn)備串口連接 主機(jī): mipsel-linux-gdb vmlinux, target remote /dev/ttyS0 目標(biāo)機(jī):運(yùn)行,停于斷點(diǎn)處 注意事項(xiàng) _init函數(shù)影響斷點(diǎn)精確 斷點(diǎn)別設(shè)置在函數(shù)入口(防止為初始化的指針被kgdb引用) 有時(shí)變量和?;厮莶徽R粫?huì)(可能由于優(yōu)化引起),CPU相關(guān)的支持代碼,不支持指令的模擬或者替代 早期龍芯的除法指令,非對齊訪問指令模擬 cache和TLB管理 龍芯cache管理指令有特殊性,板級(jí)支持-中斷,了解硬件:中斷源,控制器,

11、路由(連線) 列出方案: 一個(gè)靜態(tài)的中斷路由圖 中斷源列表 相應(yīng)的中斷控制器 中斷控制器的級(jí)連方式,8259,Bonito,CPU,KB:1 RTC:8 MS:12 UHCI:10/11 IDE:14/15,PCI:58,59,60,MIPS timer,中斷概述,四部分代碼完成中斷服務(wù): 中斷檢測和分派:genex.S-plat_irq_dispatch,功能是確定那個(gè)中斷源發(fā)生了中斷,調(diào)用do_IRQ Do_IRQ: arch/mips/irq.c,通用框架,調(diào)用相應(yīng)的中斷控制器禁止/使能相應(yīng)的中斷,調(diào)用真正的驅(qū)動(dòng) Hw_irq_handler:每個(gè)中斷源對應(yīng)一個(gè)這個(gè)結(jié)構(gòu),告訴do_IRQ

12、如何處理某個(gè)中斷. 如果你有一個(gè)新的中斷控制器,那么就要寫一段這個(gè)代碼。 驅(qū)動(dòng)代碼:做真正的事情,系統(tǒng)時(shí)間和時(shí)鐘,rtc用于保持日歷時(shí)間(啟動(dòng)時(shí)讀) 一個(gè)系統(tǒng)時(shí)鐘(常常是mips cpu提供的counter/compare硬件時(shí)鐘)用于計(jì)算jiffies,推進(jìn)系統(tǒng)時(shí)間,PCI子系統(tǒng),Documentation/mips/pci/pci.README PCI總線的一些簡單概括 啟動(dòng)次序 驅(qū)動(dòng)接口 板級(jí)相關(guān)的函數(shù)和變量,PCI總線的一些簡單概括,PCI總線有三個(gè)獨(dú)立的地址空間: config,IO,memory. 每個(gè)PCI設(shè)備都能響應(yīng)配置命令,可以響應(yīng)IO和/或memory訪問。 啟動(dòng)時(shí),BIO

13、S或者OS通過配置空間設(shè)置基址寄存器?;芳拇嫫鳑Q定了一個(gè)設(shè)備應(yīng)該響應(yīng)的IO/mem范圍。一條總線上的設(shè)備基址寄存器范圍不能重疊 多條pci總線可以通過pci-pci橋連接,pci啟動(dòng)次序,Do_basic_setup調(diào)用pci_init(). drivers/pci/pci.c Pci_init()首先調(diào)用pcibios_init pcibios_init會(huì)調(diào)用pciauto_assign_resources做一個(gè)資源分配 Pcibios_init調(diào)用pci_scan_bus Pcibios_init調(diào)用一些修正代碼,調(diào)整資源分配 從pcibios_init返回后,pci_init會(huì)做最后一

14、次基于設(shè)備的修正,PCI驅(qū)動(dòng)接口,Inb/outb/inw/outw/inl/outl: include/asm/io.h用于訪問pci io空間. Mips_io_port_base應(yīng)該初始化為pci io空間的起始地址 Readb/writeb etc. include/asm/io.h驅(qū)動(dòng)程序用它們來訪問pci mem空間。 Pci_read/write_config_byte,word,dword: include/linux/pci.h。驅(qū)動(dòng)程序用它們來訪問pci配置空間 Pci_map_single等。用于把虛擬地址映射到總線地址,例如DMA時(shí),板級(jí)函數(shù)和變量接口,Struct p

15、ci_ops my_pci_ops: 提供配置空間讀寫例程 Mips_pci_channels:用于給PCIAUTO的代碼指定系統(tǒng)所有的PCI總線和地址范圍 Pcibios_fixup_resources:傳給pci_scan_bus,發(fā)現(xiàn)新設(shè)備時(shí)調(diào)用 Pcibios_fixup: pci_scan_bus結(jié)束時(shí)調(diào)用 Pcibios_fixup_irqs:pci_scan_bus結(jié)束時(shí)調(diào)用,用于修正中斷分配。 Pcibios_assign_all_busses,調(diào)試,Oops 四個(gè)關(guān): 串口出字 基本硬件配置ok cache打開 存儲(chǔ)管理初始化ok bogoMips計(jì)算通過(打開中斷) 中斷通路至少部分正確。 Init 啟動(dòng) 用戶態(tài)ok 思考,通路法,代碼整理和提交,編碼風(fēng)格 Kernel source Documentation dir 命名、文件組織整理 生成patch 提交和修改交互 Documenatio/SubmittingPatches,性能分析和改進(jìn),存儲(chǔ)管理 例:pagesize/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論