freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計算機(jī)軟件及應(yīng)用]基于高通msm8x60的i2c驅(qū)動終極講解-文庫吧

2025-01-01 07:09 本頁面


【正文】 amp。msm_gsbi8_qup_i2c_pdata。 = amp。msm_gsbi9_qup_i2c_pdata。 = amp。msm_gsbi12_qup_i2c_pdata。endif............}其中初始化的platform_data如下static struct msm_i2c_platform_data msm_gsbi3_qup_i2c_pdata = {.clk_freq = 100000,.src_clk_rate = 24000000,.clk = gsbi_qup_clk,.pclk = gsbi_pclk,.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,}。static struct msm_i2c_platform_data msm_gsbi4_qup_i2c_pdata = {.clk_freq = 100000,.src_clk_rate = 24000000,.clk = gsbi_qup_clk,.pclk = gsbi_pclk,.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,}。static struct msm_i2c_platform_data msm_gsbi7_qup_i2c_pdata = {.clk_freq = 100000,.src_clk_rate = 24000000,.clk = gsbi_qup_clk,.pclk = gsbi_pclk,.pri_clk = 60,.pri_dat = 59,.msm_i2c_config_gpio = gsbi7_qup_i2c_gpio_config,}。static struct msm_i2c_platform_data msm_gsbi8_qup_i2c_pdata = {.clk_freq = 100000,.src_clk_rate = 24000000,.clk = gsbi_qup_clk,.pclk = gsbi_pclk,.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,}。static struct msm_i2c_platform_data msm_gsbi9_qup_i2c_pdata = {.clk_freq = 100000,.src_clk_rate = 24000000,.clk = gsbi_qup_clk,.pclk = gsbi_pclk,.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,}。static struct msm_i2c_platform_data msm_gsbi12_qup_i2c_pdata = {.clk_freq = 100000,.src_clk_rate = 24000000,.clk = gsbi_qup_clk,.pclk = gsbi_pclk,.use_gsbi_shared_mode = 1,.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,}。其中的msm_i2c_config_gpio賦值的值的定義如下static void gsbi7_qup_i2c_gpio_config(int adap_id, int config_type){if (config_type == 0) {gpio_tlmm_config(gsbi7_gpio_table[0], GPIO_CFG_ENABLE)。gpio_tlmm_config(gsbi7_gpio_table[1], GPIO_CFG_ENABLE)。} else {gpio_tlmm_config(gsbi7_i2c_table[0], GPIO_CFG_ENABLE)。gpio_tlmm_config(gsbi7_i2c_table[1], GPIO_CFG_ENABLE)。}}下面的函數(shù)會注冊該平臺設(shè)備static void __initmsm8x60_init(struct msm_board_data *board_data){ ..........msm8x60_init_buses()。 ..........platform_add_devices(surf_devices,ARRAY_SIZE(surf_devices))。 ..........}下面的函數(shù)會調(diào)用上面的初始化static void __initmsm8x60_ep680_init(void){msm8x60_init(amp。msm8x60_ep680_board_data)。}上面的函數(shù)會掛載到板級的結(jié)構(gòu)中。MACHINE_START(MSM8X60_EP680, QCT MSM8X60 EP680).map_io = msm8x60_map_io,.init_irq = msm8x60_init_irq,.init_machine =msm8x60_ep680_init,//掛載的板級初始化函數(shù).timer = amp。msm_timer,MACHINE_END以上就是對I2C控制器的注冊?;诟咄∕SM 8x60的I2C驅(qū)動終極講解(3)(20120515 11:40)標(biāo)簽:轉(zhuǎn)載 分類:高通I2C原文地址:基于高通MSM 8x60的I2C驅(qū)動終極講解(3)作者:shangbaogen 上一節(jié)分解到平臺設(shè)備已經(jīng)注冊,但是這個成員什么時間調(diào)用呢,也就是我們的驅(qū)動是在什么時候注冊進(jìn)系統(tǒng)的呢,現(xiàn)在就來跟蹤下,函數(shù)什么時候調(diào)用的。要想知道整個流程是什么樣的,這個還要從老掉牙的start_kernel()函數(shù)說起該函數(shù)是整個kernel的起始入口點:asmlinkage void __init start_kernel(void){ ...... setup_arch(amp。mand_line)。 ......rest_init()。 .......}其中的setup_arch()函數(shù)如下:void __init setup_arch(char **cmdline_p){struct machine_desc *mdesc。/*通過機(jī)器碼獲取板級結(jié)構(gòu)體,這個結(jié)構(gòu)體就是在BSP文件中的那個大的結(jié)構(gòu)體*/mdesc = setup_machine(machine_arch_type)。 ........init_machine = mdescinit_machine。}其中init_machine是一個函數(shù)指針,該函數(shù)指針的初始化如下static void (*init_machine)(void) __initdata。static int __init customize_machine(void){/* customizes platform devices, or adds new ones */if (init_machine)init_machine()。return 0。}arch_initcall(customize_machine)。其中牽涉到arch_initcall宏,把該宏展開,如下define arch_initcall(fn)__define_initcall(3,fn,3)define __define_initcall(level,fn,id) \static initcall_t __initcall_fnid __used \__attribute__((__section__(.initcall level .init))) = fn展開后的結(jié)果如下:static initcall_t __initcall_customize_machine3__used __attribute__((__section__(.))) = customize_machine其中typedef int (*initcall_t)(void)。把該函數(shù)放到.段內(nèi)該段在如下函數(shù)中執(zhí)行:static noinline void __init_refokrest_init(void) __releases(kernel_lock){......kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND)。.........}其中kernel_init函數(shù)如下:static int __init kernel_init(void * unused){.......do_basic_setup()。.........}其中的do_basic_setup()函數(shù)如下:static void __init do_basic_setup(void){......do_initcalls()。.........}其中do_initcalls()函數(shù)如下:static void __init do_initcalls(void){initcall_t *fn。for (fn = __early_initcall_end。 fn __initcall_end。 fn++)do_one_initcall(*fn)。}int do_one_initcall(initcall_t fn){ = fn()。return 。}該函數(shù)依次執(zhí)行段中得,函數(shù),也即剛才的init_machine函數(shù),也就是咱們的I2C平臺設(shè)備注冊函數(shù)得以執(zhí)行?,F(xiàn)在整個執(zhí)行流程算是跟蹤完了。基于高通MSM 8x60的I2C驅(qū)動終極講解(4)(20120515 11:40)標(biāo)簽:轉(zhuǎn)載 分類:高通I2C原文地址:基于高通MSM 8x60的I2C驅(qū)動終極講解(4)作者:shangbaogen為了鞏固上一節(jié)的初始化過程,先專門寫一小節(jié)來說明,注:部分轉(zhuǎn)自網(wǎng)絡(luò)。1),在這個區(qū)段中,函數(shù)的擺放順序是和鏈接的順序有關(guān)的,是不確定的。2),在初始化時內(nèi)核會通過這些函數(shù)指針調(diào)用這些__init函數(shù)指針,并在整個初始化完成后,釋放整個init區(qū)段(,.),注意,這些函數(shù)在內(nèi)核初始化過程中的調(diào)用順序只和這里的函數(shù)指針的順序有關(guān)和1)。,分別是.......,只要聲明core_initcall(fn)。即可。其他的各個區(qū)段的定義方法分別是:core_initcall(fn) .postcore_initcall(fn) .arch_initcall(fn) .subsys_initcall(fn) .fs_initcall(fn) .device_initcall(fn) .late_initcall(fn) .(fn)則等價于device_initcall(fn)。各個子區(qū)段之間的順序是確定的,,,是不確定的。在內(nèi)核中,不同的init函數(shù)被放在不同的子區(qū)段中。Uboot完成系統(tǒng)的引導(dǎo)并將Linux內(nèi)核拷貝到內(nèi)存之后,bootm do_bootm_linux()跳轉(zhuǎn)到kernel的起始位置;壓縮過的kernel入口在arch/arm/boot/pressed/,它將調(diào)用函數(shù) depress_kernel()./arch/arm/boot/pressed/解壓,打印 “Unpressing Linux...”,調(diào)用gunzip(),打印done, booting the kernel.然后call_kernel,執(zhí)行解壓后的kernel,經(jīng)linux/arch/arm/kernel/,在start_kernel()中完成了一系列系統(tǒng)初始化,設(shè)備及驅(qū)動的注冊即在此時完成:./init/-------------------------asmlinkage void __initstart_kernel(void){ ......rest_init()。}start_kernel()中的函數(shù)rest_init()將創(chuàng)建第一個核心線程kernel_thread(init, NULL, CLONE_FS | CLONE_SIGHAND),調(diào)用init()函數(shù):static intinit(void * unused)-------------------{do_basic_setup()。//判斷在啟動時是否指定了init參數(shù),如果指定則執(zhí)行用戶init進(jìn)程,成功將不會返回 if (execute_mand){ run_init_process(execute_mand)。 printk(KERN_WARNING Failed to execute %s. Attempting defaults...\n, execute_mand)。}/*如果沒有指定init啟動參數(shù),則查找下面的目錄init進(jìn)程,成功將不會返回,否則打印出錯信息*/run_init_process(/sbin/init)。run_init_process(/etc/init)。run_init_process(/bin/init)。run_init_process(/bin/sh)。panic(No init found. Try passing init= option to kernel.)。}繼而調(diào)用函數(shù)do_basic_setup()(此時與體系結(jié)構(gòu)相關(guān)的部分已經(jīng)初始化完了,現(xiàn)在開始初始化設(shè)備了):static void __initdo_basic_setup(v
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1