




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
嵌入式培訓(xùn)專家S3C6410ARM11開發(fā)板LinuxBSP構(gòu)建
主講:宋寶華今天的內(nèi)容BSP的組成部分plat/mach各組件的實現(xiàn)內(nèi)核節(jié)拍中斷管理時鐘GPIODMAIO內(nèi)存映射設(shè)備與資源platformdevice、resource和plarformdatauart/spi/i2c等設(shè)備板級resourceBSP的組成部分BSP作用為內(nèi)核的運行提供底層支撐屏蔽與板相關(guān)的硬件細(xì)節(jié)基本組成時鐘tick(HZ)的產(chǎn)生系統(tǒng)中斷控制的方法GPIO、DMA、時鐘資源的統(tǒng)一管理靜態(tài)映射的IO內(nèi)存設(shè)備的IO、中斷、DMA等資源封裝平臺數(shù)據(jù)ARMBSP的目錄plat-xxxlinux-2.6/arch/arm/plat-omap/ plat-pxa/ plat-s3c/plat-s3c24xx/plat-s3c64xx/plat-stmp3xxx/mach-xxxlinux-2.6/arch/arm/mach-s3c2400/mach-s3c2410/ mach-s3c2412/ mach-s3c2440/ mach-s3c2442/ mach-s3c2443/ mach-s3c24a0/ mach-s3c6400/ mach-s3c6410/時鐘節(jié)拍的產(chǎn)生sys_timer和timer_tickstaticirqreturn_ts3c2410_timer_interrupt(intirq,void*dev_id){ timer_tick(); returnIRQ_HANDLED;}staticstructirqactions3c2410_timer_irq={ .name ="S3C2410TimerTick", .flags =IRQF_DISABLED|IRQF_TIMER|IRQF_IRQPOLL, .handler =s3c2410_timer_interrupt,};staticvoid__inits3c2410_timer_init(void){ s3c2410_timer_resources(); s3c2410_timer_setup(); setup_irq(IRQ_TIMER4,&s3c2410_timer_irq);}structsys_timers3c24xx_timer={ .init =s3c2410_timer_init, .offset =s3c2410_gettimeoffset, .resume =s3c2410_timer_setup};系統(tǒng)中斷管理irq_chipstaticstructirq_chips3c_irq_uart={ .name ="s3c-uart", .mask =s3c_irq_uart_mask, .unmask =s3c_irq_uart_unmask, .mask_ack =s3c_irq_uart_maskack, .ack =s3c_irq_uart_ack,};staticvoid__inits3c64xx_uart_irq(structuart_irq*uirq){ for(offs=0;offs<3;offs++){ irq=uirq->base_irq+offs; set_irq_chip(irq,&s3c_irq_uart); set_irq_chip_data(irq,uirq); set_irq_handler(irq,handle_level_irq); set_irq_flags(irq,IRQF_VALID); } set_irq_chained_handler(uirq->parent_irq,s3c_irq_demux_uart);}void__inits3c64xx_init_irq(u32vic0_valid,u32vic1_valid){ set_irq_chip(irq,&s3c_irq_timer); ... for(uart=0;uart<ARRAY_SIZE(uart_irqs);uart++) s3c64xx_uart_irq(&uart_irqs[uart]);}GPIO管理gpio_chip和統(tǒng)一的gpio_xxxAPIstructgpio_chip{int(*request)(structgpio_chip*chip,unsignedoffset);void(*free)(structgpio_chip*chip,unsignedoffset);int(*direction_input)(structgpio_chip*chip,unsignedoffset);int(*get)(structgpio_chip*chip,unsignedoffset);int(*direction_output)(structgpio_chip*chip,unsignedoffset,intvalue);void(*set)(structgpio_chip*chip,unsignedoffset,intvalue);};intgpio_request(unsignedgpio,constchar*label);voidgpio_free(unsignedgpio);intgpio_direction_input(unsignedgpio);intgpio_direction_output(unsignedgpio,intvalue);intgpio_get_value_cansleep(unsignedgpio);CLOCK管理提供統(tǒng)一的clk_get、clk_put等API:EXPORT_SYMBOL(clk_get);EXPORT_SYMBOL(clk_put);EXPORT_SYMBOL(clk_enable);EXPORT_SYMBOL(clk_disable);EXPORT_SYMBOL(clk_get_rate);EXPORT_SYMBOL(clk_round_rate);EXPORT_SYMBOL(clk_set_rate);EXPORT_SYMBOL(clk_get_parent);EXPORT_SYMBOL(clk_set_parent);DMA管理統(tǒng)一的DMAAPI支持:intrequest_dma(unsignedintchan,constchar*device_id);voidfree_dma(unsignedintchan);voidenable_dma(unsignedintchan);voiddisable_dma(unsignedintchan);voidset_dma_mode(unsignedintchan,unsignedintmode);voidset_dma_sg(unsignedintchan,structscatterlist*sg,intnr_sg);IO內(nèi)存靜態(tài)映射map_desc和iotable_initstaticstructmap_descs3c_iodesc[]__initdata={{.virtual=(unsignedlong)S3C_VA_SYS,.pfn=__phys_to_pfn(S3C64XX_PA_SYSCON),.length=SZ_4K,.type=MT_DEVICE,},{ ...},};void__inits3c64xx_init_io(structmap_desc*mach_desc,intsize){… iotable_init(s3c_iodesc,ARRAY_SIZE(s3c_iodesc));iotable_init(mach_desc,size);}platform_device和資源platform_device和resourcestaticstructresourcesmdk6410_smsc911x_resources[]={ [0]={ .start=0x18000000, .end=0x18000000+SZ_64K-1, .flags=IORESOURCE_MEM, }, [1]={ .start=S3C_EINT(10), .end=S3C_EINT(10), .flags=IORESOURCE_IRQ|IRQ_TYPE_LEVEL_LOW, },};staticstructplatform_devicesmdk6410_smsc911x={ .name="smsc911x", .id=-1, .num_resources=ARRAY_SIZE(smdk6410_smsc911x_resources), .resource=&smdk6410_smsc911x_resources[0],};platform數(shù)據(jù)提供與板相關(guān)的硬件設(shè)置數(shù)據(jù)staticstructsmsc911x_platform_configsmdk6410_smsc911x_pdata={ .irq_polarity=SMSC911X_IRQ_POLARITY_ACTIVE_LOW, .irq_type=SMSC911X_IRQ_TYPE_OPEN_DRAIN, .flags=SMSC911X_USE_32BIT|SMSC911X_FORCE_INTERNAL_PHY, .phy_interface=PHY_INTERFACE_MODE_MII,};staticstructplatform_devicesmdk6410_smsc911x={ ... .dev={ .platform_data=&smdk6410_smsc911x_pdata, },};structsmsc911x_platform_config由對應(yīng)設(shè)備的驅(qū)動定義,而 platform_data則由驅(qū)動引用。SPI板級信息spi_board_infostaticstructspi_board_info__initdatajive_spi_devs[]={[0]={.modalias="VGG2432A4",.bus_num=1,.chip_select=0,.mode=SPI_MODE_3,/*CPOL=1,CPHA=1*/.max_speed_hz=100000,.platform_data=&jive_lcm_config,},{.modalias="WM8750",.bus_num=2,.chip_select=0,.mode=SPI_MODE_0,/*CPOL=0,CPHA=0*/.max_speed_hz=100000,},};spi_register_board_info(jive_spi_devs,ARRAY_SIZE(jive_spi_devs));I2C板級信息i2c_board_infostaticstructi2c_board_infoi2c_devs0[]__initdata={ {I2C_BOARD_INFO("24c08",0x50),}, {I2C_BOARD_INFO("wm8580",0x1b),},#ifdefCONFIG_SMDK6410_WM1190_EV1 {I2C_BOARD_INFO("wm8350",0x1a), .platform_data=&smdk6410_wm8350_pdata, .irq=S3C_EINT(12), },#endif};staticvoid__initsmdk6410_machine_init(void){ ... i2c_register_board_info(0,i2c_devs0,ARRAY_SIZE(i2c_devs0)); i2c_register_board_info(1,i2c_devs1,ARRAY_SIZE(i2c_devs1)); ...}MACHINE_STARTMACHINE_START(SMDK6410,"SMDK6410") /*Maintainer:BenDooks<>*/ .phys_io =S3C_PA_UART&0xfff00000, .io_pg_offst =(((u32)S3C_VA_UART)>>18)&0xfffc, .boot_params =S3C64XX_PA_SDRAM+0x100, .init_irq =s3c6410_init_irq, .map_io =smdk6410_map_io, .init_machine =smdk6410_machine_init, .timer =&s3c24xx_timer,MACHINE_END范例:添加LDD6410板修改Kconfig和Makefile: linux-2.6.31/arch/arm/mach-s3c6410/Kconfig + configMACH_LDD6410 + bool"LDD6410" + selectCPU_S3C6410 + selectS3C_DEV_FB + selectS3C64XX_SETUP_FB_24BPP + help + MachinesupportfortheLDD6410 + configMACH_SMDK6410 bool"SMDK6410" selectCPU_S3C6410
linux-2.6.31/arch/arm/mach-s3c6410/Makefile + obj-$(CONFIG_MACH_LDD6410)+=mach-ldd6410.o obj-$(CONFIG_MACH_SMDK6410)+=mach-smdk6410.o obj-$(CONFIG_MACH_NCP)+=mach-ncp.o
增加新板子的文件: linux-2.6.31/arch/arm/mach-s3c6410/mach-ldd6410.c文檔與參考實例Linux-2.6/arch/arm/
獲取LDD6410源代碼:svnchec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五商鋪物業(yè)委托管理合同(含社區(qū)健康管理與醫(yī)療支持)
- 二零二五年校園環(huán)境衛(wèi)生管理與綠化合同
- 二零二五年度農(nóng)村土地承包經(jīng)營權(quán)與農(nóng)村社會保障合作合同
- 二零二五年度夜店酒吧員工安全協(xié)議與安全教育培訓(xùn)費用合同
- 2025年度電動車買賣協(xié)議模版
- 二零二五年度知識產(chǎn)權(quán)法律風(fēng)險管理顧問合同
- 二零二五年度武漢房屋租賃合同物業(yè)管理約定
- 二零二五年度摩托車第三者責(zé)任保險合同
- 《物流系統(tǒng)分析》課件 項目九-任務(wù)三 (一)車輛路徑優(yōu)化模型1
- 2025年包頭a2貨運資格證模擬考試
- 分布式光伏電站支架結(jié)構(gòu)及荷載計算書
- DB61∕T 1186-2018 花椒主要病蟲害防治技術(shù)規(guī)范
- DB32T 4013-2021 第三方社會穩(wěn)定風(fēng)險評估技術(shù)規(guī)范
- QC成果提高大跨度多節(jié)點曲面鋼桁架一次安裝合格率
- 國家電網(wǎng)有限公司十八項電網(wǎng)重大反事故措施(修訂版)
- 環(huán)氧乙烷固定床反應(yīng)器課程設(shè)計
- 班、團、隊一體化建設(shè)實施方案
- 如何建構(gòu)結(jié)構(gòu)性思維 課后測試
- 施工方案(行車拆除)
- 開網(wǎng)店全部流程PPT課件
- 《春》帶拼音
評論
0/150
提交評論