版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
嵌入式培訓(xùn)專家Linux內(nèi)核的移植技術(shù)剖析主講:宋寶華今天的內(nèi)容BSP的組成部分plat/mach各組件的實(shí)現(xiàn)內(nèi)核節(jié)拍中斷管理時鐘GPIODMAIO內(nèi)存映射設(shè)備與資源platform
device、resource和plarform
datauart/spi/i2c等設(shè)備板級resourceBSP的組成部分BSP作用為內(nèi)核的運(yùn)行提供底層支撐屏蔽與板相關(guān)的硬件細(xì)節(jié)基本組成時鐘tick(HZ)的產(chǎn)生系統(tǒng)中斷控制的方法GPIO、DMA、時鐘資源的統(tǒng)一管理靜態(tài)映射的IO內(nèi)存設(shè)備的IO、中斷、DMA等資源封裝平臺數(shù)據(jù)ARM
BSP的目錄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_tickstatic
irqreturn_t
s3c2410_timer_interrupt(int
irq,
void
*dev_id){timer_tick();return
IRQ_HANDLED;}static
struct
irqaction
s3c2410_timer_irq
=
{.name.flags.handler=
"S3C2410
Timer
Tick",=IRQF_DISABLED
|IRQF_TIMER
|IRQF_IRQPOLL,=s3c2410_timer_interrupt,};staticvoid
init
s3c2410_timer_init(void){s3c2410_timer_resources();s3c2410_timer_setup();setup_irq(IRQ_TIMER4,
&s3c2410_timer_irq);}struct
sys_timer
s3c24xx_timer
={.init.offset.resume=s3c2410_timer_init,=s3c2410_gettimeoffset,=s3c2410_timer_setup};系統(tǒng)中斷管理irq_chipstatic
struct
irq_chip
s3c_irq_uart
=
{.name.mask.unmask.mask_ack.ack=
"s3c-uart",=
s3c_irq_uart_mask,=
s3c_irq_uart_unmask,=
s3c_irq_uart_maskack,=
s3c_irq_uart_ack,};static
void
init
s3c64xx_uart_irq(struct
uart_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
init
s3c64xx_init_irq(u32
vic0_valid,
u32
vic1_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_xxx
APIstruct
gpio_chip
{intvoidintintintvoid(*request)(struct
gpio_chip*chip,unsigned
offset);(*free)(struct
gpio_chip
*chip,unsigned
offset);(*direction_input)(struct
gpio_chip
*chip,unsigned
offset);(*get)(struct
gpio_chip
*chip,unsigned
offset);(*direction_output)(structgpio_chip
*chip,unsigned
offset,
int
value);(*set)(struct
gpio_chip
*chip,unsigned
offset,
int
value);};int
gpio_request(unsigned
gpio,
const
char
*label);void
gpio_free(unsigned
gpio);int
gpio_direction_input(unsigned
gpio);int
gpio_direction_output(unsigned
gpio,
int
value);int
gpio_get_value_cansleep(unsigned
gpio);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)一的DMA
API支持:int request_dma(unsigned
int
chan,
const
char
*device_id);void
free_dma(unsigned
intchan);void
enable_dma(unsigned
int
chan);void
disable_dma(unsigned
int
chan);void
set_dma_mode
(unsigned
int
chan,
unsigned
int
mode);void
set_dma_sg
(unsigned
int
chan,
struct
scatterlist
*sg,
intnr_sg);IO內(nèi)存靜態(tài)映射map_desc和iotable_initstaticstructmap_descs3c_iodesc[]
initdata
=
{{.virtual.pfn.length.type=
(unsigned
long)S3C_VA_SYS,=
phys_to_pfn(S3C64XX_PA_SYSCON),=
SZ_4K,=
MT_DEVICE,},
{...},};void
init
s3c64xx_init_io(struct
map_desc
*mach_desc,
int
size){…iotable_init(s3c_iodesc,ARRAY_SIZE(s3c_iodesc));iotable_init(mach_desc,
size);}platform_device和資源platform_device和resourcestatic
struct
resource
smdk6410_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,},};static
struct
platform_device
smdk6410_smsc911x
=
{.name.id=
"smsc911x",=-1,.num_resources
=
ARRAY_SIZE(smdk6410_smsc911x_resources),.resource =
&smdk6410_smsc911x_resources[0],};platform數(shù)據(jù)提供與板相關(guān)的硬件設(shè)置數(shù)據(jù)static
struct
smsc911x_platform_config
smdk6410_smsc911x_pdata
={.irq_polarity
=
SMSC911X_IRQ_POLARITY_ACTIVE_LOW,.irq_type.flags=
SMSC911X_IRQ_TYPE_OPEN_DRAIN,=
SMSC911X_USE_32BIT
|SMSC911X_FORCE_INTERNAL_PHY,.phy_interface
=
PHY_INTERFACE_MODE_MII,};static
struct
platform_device
smdk6410_smsc911x
=
{....dev={.platform_data
=&smdk6410_smsc911x_pdata,},};struct
smsc911x_platform_config由對應(yīng)設(shè)備的驅(qū)動定義,而
platform_data則由驅(qū)動引用。SPI板級信息spi_board_infostaticstructspi_board_info
initdata
jive_spi_devs[]={[0]
=
{.modalias.bus_num.chip_select.mode=
"VGG2432A4",=
1,=
0,=
SPI_MODE_3, /*
CPOL=1,
CPHA=1
*/.max_speed_hz =
100000,.platform_data
=
&jive_lcm_config,},
{.modalias.bus_num.chip_select.mode=
"WM8750",=
2,=
0,=
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),
},#ifdef
CONFIG_SMDK6410_WM1190_EV1{
I2C_BOARD_INFO("wm8350",
0x1a),.platform_data
=
&smdk6410_wm8350_pdata,.irq
=
S3C_EINT(12),},#endif};staticvoid
init
smdk6410_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:
Ben
Dooks
<
>
*/.phys_io.io_pg_offst=
S3C_PA_UART
&
0xfff00000,=
(((u32)S3C_VA_UART)
>>
18)
&
0xfffc,.boot_params =
S3C64XX_PA_SDRAM
+
0x100,.init_irq.map_io=s3c6410_init_irq,=smdk6410_map_io,.init_machine =smdk6410_machine_init,.timer =&s3c24xx_timer,MACHINE_END范例:添加LDD6410板修改Kconfig和Makefile:linux-2.6.31/arch/arm/mach-s3c6410/Kconfigconfig
MACH_LDD6410bool
"LDD6410"select
CPU_S3C6410select
S3C_DEV_FBselect
S3C64XX_SETUP_FB_24BPPhelpMachine
support
for
the
LDD6410++++++++config
MACH_SMDK6410bool
"SMDK6410"select
CPU_S3C6410linux-2.6.31/arch/arm/mach-s3c6410/Makefile+obj-$(CONFIG_MACH_LDD6410)
+=
mach-ldd6410.o
obj-$(CONFIG_MACH_SMDK6410)
+=
mach-smdk6410.oobj-$(CONFIG_MACH_NCP)
+=
mach-ncp.o增加新板子的文件:linux-2.6.31/arch/arm/mach-s3c64
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030博茨瓦納旅游業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030醫(yī)療康復(fù)設(shè)備產(chǎn)業(yè)市場發(fā)展分析及投資前景與趨勢研究報告
- 2025-2030醫(yī)療康復(fù)器械產(chǎn)品銷售代理行業(yè)市場競爭力分析及投資路徑研究報告
- 2025-2030醫(yī)療廢棄物壓縮處理設(shè)備應(yīng)用市場現(xiàn)狀供需分析及投資評估策略研究報告
- 2025-2030醫(yī)療大數(shù)據(jù)分析應(yīng)用及行業(yè)創(chuàng)新與投資價值報告
- 大氣環(huán)流模式-洞察與解讀
- 優(yōu)化軸承配置方案-洞察與解讀
- 免疫調(diào)節(jié)對疤痕抑制影響-洞察與解讀
- 技術(shù)迭代與競爭動態(tài)-洞察與解讀
- 數(shù)據(jù)分析在視頻營銷中的應(yīng)用-洞察與解讀
- 2025年關(guān)于院外購藥吃回扣自查報告
- 【化學(xué)】遼寧省丹東市2025屆高三下學(xué)期總復(fù)習(xí)質(zhì)量測試(一)試題(解析版)
- 信息系統(tǒng)分析與設(shè)計 課件全套 廖浩德 0 課程簡介、1.1 計算與計算學(xué)科 -9 動態(tài)行為建模
- 儀表聯(lián)鎖培訓(xùn)課件
- 2025版小學(xué)語文新課程標(biāo)準(zhǔn)
- 2025至2030中國電催化氧化設(shè)備行業(yè)項(xiàng)目調(diào)研及市場前景預(yù)測評估報告
- 物業(yè)公司出納管理制度
- 班級活動聽歌識曲
- 華為固定資產(chǎn)管理制度
- 混凝土結(jié)構(gòu)工程施工質(zhì)量驗(yàn)收規(guī)范范本
- 客運(yùn)駕駛員培訓(xùn)教學(xué)大綱
評論
0/150
提交評論