日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]這是本人的一個(gè)課程總結(jié),其中涉及幾個(gè)驅(qū)動(dòng)文件在最小內(nèi)核編譯時(shí)是不需要的。kernel:2.6.26.5gcc:arm-linux-gcc(gcc 3.4.1)cpu:s3c2410編譯設(shè)置使用arm-linux-交叉編譯工具鏈修改根目錄下MakefileARCH ?= armCR

這是本人的一個(gè)課程總結(jié),其中涉及幾個(gè)驅(qū)動(dòng)文件在最小內(nèi)核編譯時(shí)是不需要的。

kernel:2.6.26.5

gcc:arm-linux-gcc(gcc 3.4.1)

cpu:s3c2410

編譯設(shè)置

使用arm-linux-交叉編譯工具鏈

修改根目錄下Makefile

ARCH ?= arm

CROSS_COMPILE ?=arm-linux-


內(nèi)核移植

nand分區(qū)

修改arch/arm/plat-s3c24xx/common-smdk.c,找到相關(guān)代碼做如下修改

static struct mtd_partition smdk_default_nand_part[] = {

/* [0] = {

.name = "Boot Agent",

.size = SZ_16K,

.offset = 0,

},

[1] = {

.name = "S3C2410 flash partition 1",

.offset = 0,

.size = SZ_2M,

},

[2] = {

.name = "S3C2410 flash partition 2",

.offset = SZ_4M,

.size = SZ_4M,

},

[3] = {

.name = "S3C2410 flash partition 3",

.offset = SZ_8M,

.size = SZ_2M,

},

[4] = {

.name = "S3C2410 flash partition 4",

.offset = SZ_1M * 10,

.size = SZ_4M,

},

[5] = {

.name = "S3C2410 flash partition 5",

.offset = SZ_1M * 14,

.size = SZ_1M * 10,

},

[6] = {

.name = "S3C2410 flash partition 6",

.offset = SZ_1M * 24,

.size = SZ_1M * 24,

},

[7] = {

.name = "S3C2410 flash partition 7",

.offset = SZ_1M * 48,

.size = SZ_16M,

}*/

/* start: for harbour */

[0] = {

name: "bootloader",

size: 0x00100000,

offset: 0x0,

},

[1] = {

name: "kernel",

size: 0x00300000,

offset: 0x00100000,

},

[2] = {

name: "root",

size: 0x02800000,

offset: 0x00400000,

},

[3] = {

name: "user",

size: 0x00f00000,

offset: 0x02d00000,

}

};

/* end: for harbour */


static struct s3c2410_nand_set smdk_nand_sets[] = {

[0] = {

.name = "NAND",

.nr_chips = 1,

.nr_partitions = ARRAY_SIZE(smdk_default_nand_part),

.partitions = smdk_default_nand_part,

},

};


static struct s3c2410_platform_nand smdk_nand_info = {

.tacls = 0,

.twrph0 = 30,

.twrph1 = 0,

.nr_sets = ARRAY_SIZE(smdk_nand_sets),

.sets = smdk_nand_sets,

};

此時(shí)如果運(yùn)行

#make s3c2410_defconfig啟用s3c2410默認(rèn)內(nèi)核配置

#make menuconfig

修改

boot option

default command line

root=/dev/mtdblock2 init=linuxrc console=ttySAC0,115200


運(yùn)行

#make bzImage

此時(shí)的內(nèi)核就可在板上跑通了。


觸摸屏驅(qū)動(dòng)移植

修改arch/arm/mach-s3c2410/mach-smdk2410.c,添加

static struct s3c2410ts_mach_info s3c2410_tscfg __initdata = {

.delay = 10000,

.presc = 49,

.oversampling_shift = 2,

};

修改static struct platform_device *smdk2410_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

/*start: for harbour*/

&s3c_device_ts, //加入此行

/*end: for harbour*/

};

在static void __init smdk2410_init(void)中加入:

s3c24xx_ts_set_platdata(&s3c2410_tscfg);

在include/asm-arm/plat-s3c24xx/devs.h中加入

extern struct platform_device s3c_device_ts;


在driver/input/touchscreen/下添加s3c2410-ts.c文件,

在include/asm-arm/arch-s3c2410/下添加ts.h文件,ts.h文件內(nèi)容如下:

#ifndef __ASM_ARM_S3C2410_TS_H

#define __ASM_ARM_S3C2410_TS_H


struct s3c2410ts_mach_info {

int delay;

int presc;

int oversampling_shift;

};


extern void __init s3c24xx_ts_set_platdata(struct s3c2410ts_mach_info *);

#endif /* __ASM_ARM_S3C2410_TS_H */


修改arch/arm/plat-s3c24xx/devs.c,加入

#include

/* Touch Screen Controller */

struct platform_device s3c_device_ts = {

.name = "s3c2410-ts",

.id = -1,

};


EXPORT_SYMBOL(s3c_device_ts);


void __init s3c24xx_ts_set_platdata(struct s3c2410ts_mach_info *pd)

{

struct s3c2410ts_mach_info *npd;


npd = kmalloc(sizeof(*npd), GFP_KERNEL);

if (npd) {

memcpy(npd, pd, sizeof(*npd));

s3c_device_ts.dev.platform_data = npd;

} else {

printk(KERN_ERR "no memory for TS platform datan");

}

}


將s3c2410-ts.c文件拷入drivers/input/touchscreen/目錄下。


修改drivers/input/touchscreen/Makefile

加入obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410-ts.o


修改drivers/input/touchscreen/Kconfig,在if INPUT_TOUCHSCREEN下加入

config TOUCHSCREEN_S3C2410

tristate “s3c2410 touchscreen”

depends on ARCH_SMDK2410

default y

help

This is used for supporting s3c2410 touchscreen.


LCD驅(qū)動(dòng)移植

修改arch/arm/mach-s3c2410/mach-smdk2410.c,添加

static struct s3c2410fb_display s3c2410fb_lcd_display __initdata = {

.width = 320,

.height = 240,

.xres = 320,

.yres = 240,

.bpp = 16,

.lcdcon5 = S3C2410_LCDCON5_FRM565 |

S3C2410_LCDCON5_INVVCLK |

S3C2410_LCDCON5_INVVLINE |

S3C2410_LCDCON5_INVVFRAME |

S3C2410_LCDCON5_HWSWP |

(0<<7) |

(0<<6) |

(0<<1),

.type =S3C2410_LCDCON1_TFT,

.pixclock = 270000,

.left_margin = 7,

.right_margin = 8,

.hsync_len = 29,

.upper_margin = 11,

.lower_margin = 14,

.vsync_len = 2,

};


static struct s3c2410fb_mach_info s3c2410fb_lcdcfg __initdata = {


.displays = &s3c2410fb_lcd_display,

.num_displays = 1,

.default_display = 0,

.lpcsel = 0x0,

.gpccon = 0xaa9556a9,

.gpccon_mask = 0xfffffff,

.gpcup = 0xffffffff,

.gpcup_mask = 0xffffffff,

.gpdcon = 0xaaaaaaaa,

.gpdcon_mask = 0xfffffff,

.gpdup = 0xffffffff,

.gpdup_mask = 0xffffffff,

};


在static void __init smdk2410_init(void)中加入:

s3c24xx_fb_set_platdata(&s3c2410fb_lcdcfg);


用提供的s3c2410fb.c.nbsp;替換drivers/video/s3c2410fb.c.


聲卡驅(qū)動(dòng)移植

將s3c2410sound.c加到目錄/sound/oss下;

修改sound/oss下的Kconfig文件:

在文件中添加:

Config S3C2410_SOUND_OSS

Tristate “S3C2410 1341 sound driver ”

修改/linux-2.6.14/sound/oss下的Makefile文件:

在文件中添加一行:

Obj-$(CONFIG_S3C2410_SOUND_OSS) += s3c2410sound.o


網(wǎng)卡(DM9000)驅(qū)動(dòng)移植

修改arch/arm/mach-s3c2410/mach-smdk2410.c,找到如下代碼修改:

#define pSMDK2410_ETH_IO (__phys_to_pfn(0x18000000))


static struct map_desc smdk2410_iodesc[] __initdata = {

/* start: for harbour */

{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE},

/* end: for harbour */

};

在如下結(jié)構(gòu)體中添加:

static struct platform_device *smdk2410_devices[] __initdata = {

&s3c_device_dm9000,

};


修改arch/arm/plat-s3c24xx/devs.c中添加:

#include

#define DM9000A_BASE 0x18000300

#define DM9000A_OFFSET1 0x03

#define DM9000A_OFFSET2 0x04


static struct resource s3c_dm9000_resource[] = {


[0] = {

.start = DM9000A_BASE, // 0x19000000 + 0x300,

.end = DM9000A_BASE+DM9000A_OFFSET1,//0x19000000 + 0x300 + 0x03,

.flags = IORESOURCE_MEM

},


[1] = {

.start = DM9000A_BASE+DM9000A_OFFSET2,//0x19000000 + 0x300 + 0x04,

.end = DM9000A_BASE+DM9000A_OFFSET2+DM9000A_OFFSET1, //old is 7f 0x3f

.flags = IORESOURCE_MEM

},


[2] = {

.start = IRQ_EINT19,

.end = IRQ_EINT19,

.flags = IORESOURCE_IRQ,//|IORESOURCE_IRQ_LOWEDGE,

}


};


static struct dm9000_plat_data s3c_device_dm9000_platdata = {

.flags = DM9000_PLATF_16BITONLY,


};


struct platform_device s3c_device_dm9000 = {

.name= "dm9000",

.id= -1,

.num_resources= ARRAY_SIZE(s3c_dm9000_resource),

.resource= s3c_dm9000_resource,

.dev= {

.platform_data = &s3c_device_dm9000_platdata,

}

};


EXPORT_SYMBOL(s3c_device_dm9000);


修改drivers/net/dm9000.c:用提供的dm9000.c替換原有的文件。



文件系統(tǒng)建立

利用原來(lái)的rootfs文件目錄,在dev目錄下建立設(shè)備文件,

#mknod console c 5 1

#mknod null c 1 3

#mknod zero c 1 5


#mkdir input

#mknod mice c 13 63

#mknod mouse0 c 13 32

#mknod event0 c 13 64


#mkdir mtdblock

#mknod 0 b 31 0

#mknod 1 b 31 1

#mknod 2 b 31 2

#mknod 3 b 31 3


#mkdir vc

#mknod 0 c 4 0

#mknod 1 c 4 1

#mknod 2 c 4 2


#mkdir tts

#mknod 0 c 204 64

#mknod 1 c 204 65

#mknod 2 c 204 66


#mkdir shm

#mkdir usb

其他的文件可根據(jù)需要如此添加,由于cramfs為只讀文件系統(tǒng),2.6.26.5內(nèi)核去掉了devfs,所以要在文件系統(tǒng)中建立好需要的文件節(jié)點(diǎn),或者是將dev目錄掛載成可讀寫(xiě)文件系統(tǒng),使用udev來(lái)添加設(shè)備節(jié)點(diǎn)。


修改usr/etc/rc.local

注釋掉rm –r /dev/ts

ln –sf /dev/input/mouse0 /dev/ts

目的是為了消除一條錯(cuò)誤提示信息。


內(nèi)核配置

修改內(nèi)核源碼根目錄下的Makefile,

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-


直接使用內(nèi)核中專(zhuān)門(mén)為s3c2410提供的配置文件,在arch/arm/configs下

#make s3c2410_defconfig

#make menuconfig進(jìn)行其他配置

添加tmpfs支持

File systems ->

Pseudo filesystems >

[*] Virtual memory file system support (former shm fs)

這樣就可以將tmpfs進(jìn)行掛載,來(lái)開(kāi)辟出可寫(xiě)的目錄。


選中觸摸屏接口

Device Drivers->

Input device support ->

[*]Event interface

2.6.26.5內(nèi)核用event接口取代了原來(lái)的tsdev接口,因此此處應(yīng)選中event interface。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉