技術(shù)深化arm開發(fā)精彩專題視頻宋老師s3c6410arm11開發(fā)板bsp構(gòu)建_第1頁
技術(shù)深化arm開發(fā)精彩專題視頻宋老師s3c6410arm11開發(fā)板bsp構(gòu)建_第2頁
技術(shù)深化arm開發(fā)精彩專題視頻宋老師s3c6410arm11開發(fā)板bsp構(gòu)建_第3頁
技術(shù)深化arm開發(fā)精彩專題視頻宋老師s3c6410arm11開發(fā)板bsp構(gòu)建_第4頁
技術(shù)深化arm開發(fā)精彩專題視頻宋老師s3c6410arm11開發(fā)板bsp構(gòu)建_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論