




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、linux mini2440平臺移植-內(nèi)核移植、yaffs2文件系統(tǒng)移植1.1 獲取Linux內(nèi)核源代碼有很多方式可以獲取Linux內(nèi)核源代碼,如果你的linux平臺可以上互聯(lián)網(wǎng),可以直接在命令行輸入以下命令獲取到Linux-:#wget /pub/linux/kernel/v2.6/linux-.tar.gz當(dāng)然你也可以先在Windows系統(tǒng)下使用迅雷等工具下載完,再復(fù)制到linux中。1.2解壓內(nèi)核源代碼假定我們剛才把內(nèi)核源代碼下載到了/root/mini2440目錄,執(zhí)行以下解壓命令:#cd /op
2、t/FriendlyARM/mini2440#tar xvzf linux-.tar.gz1.3指定交叉編譯變量我們移植目的是讓Linux-可以在mini2440上運(yùn)行。首先,我們要使得Linux-的缺省目標(biāo)平臺成為ARM的平臺。修改總目錄下的Makefile原export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= $(SUBARCH)CROSS_COMPILE ?=改為export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= armCROSS_COMPILE ?= arm-lin
3、ux-其中,ARCH是指定目標(biāo)平臺為arm,CROSS_COMPILE是指定交叉編譯器,這里指定的是系統(tǒng)默認(rèn)的交叉編譯器,如要使用其它的,則要把編譯器的全路徑在這里寫出。接下來,要測試一下linux的編譯是否能正常通過。執(zhí)行:#make s3c2410_defconfig ;使用缺省內(nèi)核配置文件,s3c2410_defconfig是SMDK2440的缺省配置文件,我的s3c2410_defconfig文件位于/arch/arm/configs/s3c2410_defconfig#make ;編譯時間較長編譯通過,在此我們先不必?zé)龑懙介_發(fā)板驗(yàn)證它的正確性。1.4克隆建立自己的目標(biāo)平臺1.4.1關(guān)
4、于機(jī)器碼以上編譯是用的Linux內(nèi)核本身支持的目標(biāo)平臺配置,它對應(yīng)于SMDK2440?,F(xiàn)在我們要參考SMDK2440加入自已的開發(fā)板平臺,我們使用的是mini2440,因此取名為MINI2440。需要說明的是,Linux-本身已經(jīng)包含了mini2440的支持,這樣就出現(xiàn)了重名。那怎么辦呢?在此我們依然使用MINI2440這個名稱,只不過在后面的移植步驟中,把原始內(nèi)核自帶的mini2440代碼部分直接刪除就可以了,以免和我們自己移植的混淆了。首先,很關(guān)鍵的一點(diǎn),內(nèi)核在啟動時,是通過bootloader傳入的機(jī)器碼(MACH_TYPE)確定應(yīng)啟動哪種目標(biāo)平臺的,友善之臂已經(jīng)為min
5、i2440申請了自己的機(jī)器碼為1999,它位于linux-/arch/arm/tools/mach_types文件中.如果內(nèi)核的機(jī)器碼和bootloader傳入的不匹配,就會經(jīng)常出現(xiàn)下面的錯誤:Uncompressing Linux. done, bootingthe kernel.運(yùn)行到這不就停住了提示:在U-boot/include/asm-arm/mach-types.h中可以看到mini2440的機(jī)器碼定義接下來,我們注意到linux-/arch/arm/mach-s3c2440目錄下有個mach-mini2440.c文件,它其實(shí)就是國外愛好者為mini
6、2440移植添加的主要內(nèi)容了,但我們不用它,把它直接刪除。將linux-/arch/arm/mach-s3c2440/目錄下的mach-smdk2440.c復(fù)制一份。命名為mach-mini2440.c,找到MACHINE_START(S3C2440, SMDK2440),修改為MACHINE_START(MINI2440, FriendlyARM Mini2440 development board)。提示:開發(fā)板運(yùn)行后,在命令行終端輸入:cat /proc/cpuinfo可以看到我們添加的開發(fā)板信息1.4.2修改時鐘源頻率現(xiàn)在再來修改系統(tǒng)時鐘源,在mach-mini2440
7、.c(就是我們剛剛通過復(fù)制mach-smdk2440.c得到的)的第160行static void _init smdk2440_map_io(void)函數(shù)中,把其中的(代表原SMDK2440目標(biāo)板上的晶振是16.9344MHz)改為mini2440開發(fā)板上實(shí)際使用的12,000,000(代表mini2440開發(fā)板上的晶振12MHz,元器件標(biāo)號為X2)1.4.3從SMDK2440到MINI2440因?yàn)槲覀円谱髯约旱膍ini2440平臺體系,因此把mach-mini2440.c中所有的smdk2440字樣改為mini2440,可以使用批處理命令修改,在vim的命令模式下輸入:%s/smdk2
8、440/mini2440/g上面這句的意思是:把所有和“smdk2440”匹配的字符串全部替換為“mini2440”,前面的“%s“代表字符串匹配,最后的“g”代表global,是全局的意思,除此之外,還有一個地方需要改動,在mini2440_machine_init(void)函數(shù)中,把smdk_machine_init()函數(shù)調(diào)用注釋掉,因?yàn)槲覀兒竺鏁帉懽约旱某跏蓟瘮?shù),不需要調(diào)用smdk2440原來的.1.4.4編譯測試在Linux源代碼根目錄下執(zhí)行#make mini2440_defconfig ;使用Linux官方自帶的mini2440配置#make zImage ;編譯內(nèi)核,時間
9、較長,最后會生成zImage我的s3c2410_defconfig文件位于/arch/arm/configs/mini2440_defconfig重新編譯并把生成的內(nèi)核文件zImage(位于arch/arm/boot目錄)下到板子中,可以看到內(nèi)核已經(jīng)可以正常啟動了,但此時大部分硬件驅(qū)動還沒加,并且也沒有文件系統(tǒng),因此還無法登陸。注意:(1)如果你先前已經(jīng)編譯過內(nèi)核了,請先清理一下,不然會提示編譯的文件過時了。(2)注意在先前關(guān)于機(jī)器碼一項(xiàng)時修改的MACHINE_START(S3C2440, SMDK2440),修改為MACHINE_START(MINI2440, FriendlyARM Min
10、i2440 development board)。這里的MINI2440必須要大寫,我自己的理解是跟機(jī)器碼里面的類型一致。1.5關(guān)于內(nèi)核配置菜單中的mini2440選項(xiàng)在開始移植其他驅(qū)動之前,我們再了解一些看起來比較“神秘”的常識,那就是運(yùn)行make menuconfig時,內(nèi)核配置菜單中的mini2440選項(xiàng)是如何出現(xiàn)的。在命令行執(zhí)行:#make menuconfig ;前面已經(jīng)執(zhí)行了make mini2440_defconfig加載了缺省配置,因此這里可以直接執(zhí)行該命令按上下鍵移動到System Type,按回車進(jìn)入該子菜單,再找到S3C2440 Machines,按回車進(jìn)入該子菜單在此就
11、可以看到Linux天生內(nèi)核對mini2440開發(fā)板的支持選項(xiàng)了,那么它們是從哪里來的呢?打開Linux-/arch/arm/mach-s3c2440/Kconfig文件可以找到相關(guān)信息?,F(xiàn)在明白了吧,“MINI2440 development board”正是在這個Kconfig文件中定義說明的,當(dāng)然你可以根據(jù)自己的喜好改為其他顯示信息。這里的顯示信息只是在內(nèi)核配置菜單中出現(xiàn)的,要讓選擇的配置實(shí)際起效,還需要根據(jù)此配置在Makefile中添加相應(yīng)的代碼文件,請看該目錄下的Makefile。這樣,配置文件就跟實(shí)際的代碼文件通過配置定義聯(lián)系在一起了,這里的配置定義是“CONFIG_
12、MACH_MINI2440”,內(nèi)核中還有很多類似的配置定義,并且有的配置定義還存在依賴關(guān)系,我們在此就不對它們詳細(xì)說明了,隨著對內(nèi)核代碼結(jié)構(gòu)的不斷熟悉,你就會逐漸學(xué)會分析和查找你所需要的各種配置和定義等。1.6移植Nand驅(qū)動并更改分區(qū)信息1.6.1 Linux-內(nèi)核所支持的Nand Flash類型Linux已經(jīng)自帶了大部分Nand Flash驅(qū)動,在linux-/drivers/mtd/nand/nand_ids.c文件中,定義了所支持的各種Nand Flash類型。1.6.2修改Nand Flash分區(qū)表但是系統(tǒng)默認(rèn)的分區(qū)不是我們所需的,所以
13、要自已修改,除此之外,還有Nand Flash的結(jié)構(gòu)信息需要增加填寫,以便能夠適合系統(tǒng)自帶的Nand Flash驅(qū)動接口,這可以參考SMDK2440中關(guān)于Nand Flash設(shè)備注冊的一些信息。打開/arch/arm/plat-s3c24xx/common-smdk.c,可以看到這樣一個結(jié)構(gòu)體:注意這里是參考這個文件夾的內(nèi)容,改動還是在mach-mini2440.cstatic struct mtd_partition smdk_default_nand_part = 0 = .name = Boot Agent, .size = SZ_16K, .offset = 0, , 1 = .nam
14、e = 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 = S3C
15、2410 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, ;這其實(shí)就是Nand Flash的分區(qū)表,在Linux-中,nand驅(qū)動是被注冊為平臺設(shè)備的,這同樣可在/arch/arm/pl
16、at-24xx/common-smdk.c文件中看出,如下:static struct s3c2410_platform_nand smdk_nand_info = .tacls = 20, .twrph0 = 60, .twrph1 = 20, .nr_sets = ARRAY_SIZE(smdk_nand_sets), .sets = smdk_nand_sets,;/* devices we initialise */static struct platform_device _initdata *smdk_devs = &s3c_device_nand, &smdk_led4, &sm
17、dk_led5, &smdk_led6, &smdk_led7,;參考以上結(jié)構(gòu)信息,我們也在自己的mach-mini2440.c中照此添加實(shí)現(xiàn),同時需要參考友善之臂原廠內(nèi)核中的Nand分區(qū)表因此,在mach-mini2440.c中加入以下代碼:首先添加幾個頭文件:#include #include #include #include #include 然后加入以下代碼:static struct mtd_partition mini2440_default_nand_part = 0 = .name = supervivi, /這里是bootloader所在的分區(qū),可以放置u-boot, su
18、pervivi等內(nèi)容,對應(yīng)/dev/mtdblock0 .size = 0x, .offset = 0, , 1 = .name = param, /這里是supervivi的參數(shù)區(qū),其實(shí)也屬于bootloader的一部分,如果u-boot比較大,可以把此區(qū)域覆蓋掉,不會影響系統(tǒng)啟動,對應(yīng)/dev/mtdblock1 .offset = 0x, .size = 0x, , 2 = .name = Kernel, /內(nèi)核所在的分區(qū),大小為5M,足夠放下大部分自己定制的巨型內(nèi)核了,比如內(nèi)核使用了更大的Linux Logo圖片等,對應(yīng)/dev/mtdblock2 .offset = 0x, .siz
19、e = 0x, , 3 = .name = root, /文件系統(tǒng)分區(qū),友善之臂主要用來存放yaffs2文件系統(tǒng)內(nèi)容,對應(yīng)/dev/mtdblock3 .offset = 0x, .size = 1024 * 1024 * 1024, / , 4 = .name = nand, /此區(qū)域代表了整片的nand flash,主要是預(yù)留使用,比如以后可以通過應(yīng)用程序訪問讀取/dev/mtdblock4就能實(shí)現(xiàn)備份整片nand flash了。 .offset = 0x, .size = 1024 * 1024 * 1024, / ;/這里是開發(fā)板的nand flash設(shè)置表,因?yàn)榘遄由现挥幸黄?,因此?/p>
20、就只有一個表static struct s3c2410_nand_set mini2440_nand_sets = 0 = .name = NAND, .nr_chips = 1, .nr_partitions = ARRAY_SIZE(mini2440_default_nand_part), .partitions = mini2440_default_nand_part, ,;/這里是nand flash本身的一些特性,一般需要對照datasheet填寫,大部分情況下按照以下參數(shù)填寫即可static struct s3c2410_platform_nand mini2440_nand_in
21、fo = .tacls = 20, .twrph0 = 60, .twrph1 = 20, .nr_sets = ARRAY_SIZE(mini2440_nand_sets), .sets = mini2440_nand_sets, .ignore_unset_ecc = 1,;/除此之外,還需要把nand flash設(shè)備注冊到系統(tǒng)中,static struct platform_device *mini2440_devices _initdata = &s3c_device_usb,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_d
22、evice_iis,&s3c_device_nand, /把nand flash設(shè)備添加到開發(fā)板的設(shè)備列表結(jié)構(gòu);找到下邊程序添加一條語句:static void _init mini2440_machine_init(void)s3c24xx_fb_set_platdata(&mini2440_fb_info);s3c_i2c0_set_platdata(NULL);s3c_device_nand.dev.platform_data = &mini2440_nand_info; /添加platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2
23、440_devices);注意:mini2440_default_nand_part、mini2440_nand_sets、mini2440_nand_info三個結(jié)構(gòu)體順序不能錯。另外,這三段最好放在頂端頭文件的下邊,之前測試過放在下邊有編譯出錯的情況不知時候與位置有關(guān)。到這里就完成了NandFlash的驅(qū)動的移植,可以下載到開發(fā)板運(yùn)行看看啟動的信息了。1.6.3 從啟動信息中查看分區(qū)表注意:雖然說開始信息里面uncorrectable error :這樣的錯誤,但是還是可以繼續(xù)成功,這里不要在意這些error。至此,就完成了nand flash驅(qū)動的移植,此時在內(nèi)核根目錄執(zhí)行“make z
24、Image”,把生成的zImage燒寫到開發(fā)板,可以在啟動時看到如圖紅色信息,它們正是我們剛剛添加的nand flash分區(qū)信息,以及開發(fā)板本身nand flash的一些信息,這里可以看到是256M的nand flash。S3C24XX NAND Driver, (c) 2004 Simtec Electronicss3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29nss3c24xx-nand s3c2440-nand: NAND soft ECCNAND device: Manufacturer ID: 0x
25、ec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)Scanning device for bad blocksBad eraseblock 256 at 0x0Bad eraseblock 257 at 0x0Bad eraseblock 317 at 0xa0000Bad eraseblock 1261 at 0xda0000Creating 5 MTD partitions on NAND 256MiB 3,3V 8-bit:0x0-0x0 : superviviuncorrectable error :0x0-0x0 : paramftl
26、_cs: FTL header not found.0x0-0x0 : Kernel0x0-0x0 : rootmtd: partition root extends beyond the end of device NAND 256MiB 3,3V 8-bit- size truncated to 0xfaa0000ftl_cs: FTL header not found.0x0-0x0 : nandmtd: partition nand extends beyond the end of device NAND 256MiB 3,3V 8-bit- size truncated to 0x
27、uncorrectable error :dm9000 Ethernet Driver, V1.31dm9000 dm9000: eth%d: Invalid ethernet MAC address. Please set using ifconfigeth0: dm9000e at c486e300,c IRQ 51 MAC: 00:00:00:00:00:00 (chip)ohci_hcd: USB 1.1 Open Host Controller (OHCI) Drivers3c2410-ohci s3c2410-ohci: S3C24XX OHCIs3c2410-ohci s3c24
28、10-ohci: new USB bus registered, assigned bus number 1s3c2410-ohci s3c2410-ohci: irq 42, io mem 0xusb usb1: configuration #1 chosen from 1 choicehub 1-0:1.0: USB hub foundhub 1-0:1.0: 2 ports detectedusbcore: registered new interface driver libusuals3c2440-usbgadget s3c2440-usbgadget: S3C2440: incre
29、asing FIFO to 128 bytesmice: PS/2 mouse device common for all miceS3C24XX RTC, (c) 2004,2006 Simtec Electronicss3c2410-rtc s3c2410-rtc: rtc disabled, re-enablings3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0i2c /dev entries driverS3C2410 Watchdog Timer, (c) 2004 Simtec Electronicss3c2410-
30、wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabledcpuidle: using governor laddersdhci: Secure Digital Host Controller Interface driversdhci: Copyright(c) Pierre Ossmans3c-sdi s3c2440-sdi: powered down.s3c-sdi s3c2440-sdi: mmc0 - using pio, sw SDIO IRQusbcore: registered new interface dr
31、iver hiddevusbcore: registered new interface driver usbhid1.7移植yaffs21.7.1獲取yaffs2源代碼現(xiàn)在大部分開發(fā)板都可以支持yaffs2文件系統(tǒng),它是專門針對嵌入式設(shè)備,特別是使用nand flash作為存儲器的嵌入式設(shè)備而創(chuàng)建的一種文件系統(tǒng),早先的yaffs僅支持小頁(512byte/page)的nand flash,現(xiàn)在的開發(fā)板大都配備了更大容量的nand flash,它們一般是大頁模式的(2K/page),使用yaffs2就可以支持大頁的nand flash,下面是yaffs2的移植詳細(xì)步驟。在http:/www.y
32、/node/346可以下載到最新的yaffs2源代碼,需要使用git工具,在命令行輸入:#git clone git:/www.aleph1.co.uk/yaffs2稍等片刻,就可以下載到最新的yaffs2的源代碼目錄。1.7.2為內(nèi)核打上yaffs2補(bǔ)丁這可以通過yaffs2目錄下的腳本文件patch-ker.sh來給內(nèi)核打補(bǔ)丁,用法如下:rootlocalhost yaffs2# ./patch-ker.sh c /root/linux-test/linux-usage: ./patch-ker.sh c/l m/s kernelpathif c/l is
33、c, then copy. If l then linkif m/s is m, then use multi version code. If s then use single version code /注意這一句話,根據(jù)自己需要選用第二個參數(shù)是m還是srootlocalhost yaffs2# ./patch-ker.sh c s /root/linux-test/linux-*Warning*You have chosen to use the single kernel variant of the yaffs VFS glue codethat only work
34、s with the latest Linux kernel tree.If you are using an olderversion of Linux then you probably wanted to use the multi-version variant byre-running the patch-ker.sh script using m as a the second argument.ie ./patch-ker.sh c m /root/linux-test/linux-Updating /root/linux-test/linux-/
35、fs/KconfigUpdating /root/linux-test/linux-/fs/Makefilerootlocalhost yaffs2#注意第二個參數(shù)m/s,如果不指定,有時會執(zhí)行失敗。上述命令完成下面三件事:/有助于理解修改內(nèi)核文件/fs/Kconfig,增加下面兩行(在177行附近):if MISC_FILESYSTEMSsource fs/adfs/Kconfigsource fs/affs/Kconfigsource fs/ecryptfs/Kconfigsource fs/hfs/Kconfigsource fs/hfsplus/Kconfigsourc
36、e fs/befs/Kconfigsource fs/bfs/Kconfigsource fs/efs/Kconfigsource fs/yaffs2/Kconfigsource fs/jffs2/Kconfig# UBIFS File system configuration修改內(nèi)核文件/fs/Makefile,增加下面兩行(在129行附近):obj-$(CONFIG_GFS2_FS) += gfs2/obj-$(CONFIG_EXOFS_FS) += exofs/obj-$(CONFIG_YAFFS_FS)+= yaffs2/在內(nèi)核文件的fs目錄下創(chuàng)建yaffs2子目錄,然后復(fù)制如下文件:
37、將yaffs2源碼目錄下的Makefile.kernel文件復(fù)制為內(nèi)核fs/yaffs2/Makefile文件。將yaffs2源碼目錄下的Kconfig文件復(fù)制為內(nèi)核fs/yaffs2/目錄下。將yaffs2源碼目錄下的*.c、*.h文件(不包括子目錄下的文件)復(fù)制為內(nèi)核fs/yaffs2/目錄下。1.7.3配置和編譯帶YAFFS2支持的內(nèi)核在Linux內(nèi)核源代碼根目錄運(yùn)行:make menuconfig,移動上下按鍵找到File Systems,按回車進(jìn)入該子菜單再找到Miscellaneous filesystems菜單項(xiàng),按回車進(jìn)入該子菜單,找到Y(jié)AFFS2 file system su
38、pport,并按空格選中它,這樣我們就在內(nèi)核中添加了yaffs2文件系統(tǒng)的支持,按Exit退出內(nèi)核配置。在命令行執(zhí)行:#make zImage最后會生成linux-/arch/arm/boot/zImage,使用supervivi的“k“功能把它燒寫到nand flash,按“b“啟動系統(tǒng),這時,如果nand flash已經(jīng)存在文件系統(tǒng)(可以使用supervivi的“y“功能燒寫友善之臂提供的現(xiàn)成的yaffs2文件系統(tǒng)映像root_qtopia-128M.img用以測試),如果可以進(jìn)入文件系統(tǒng)了,這說明yaffs2已經(jīng)移植成功。linux mini2440平臺移
39、植-移植DM9000網(wǎng)卡驅(qū)動1.1.1設(shè)備資源初始化Linux-已經(jīng)自帶了完善的DM9000網(wǎng)卡驅(qū)動 (源代碼位置:linux-/ drivers/net/dm9000.c),它也是一個平臺設(shè)備,因此在目標(biāo)平臺初始化代碼中,只要填寫好相應(yīng)的結(jié)構(gòu)表即可(在mach-mini2440.c里面),具體步驟如下:首先添加驅(qū)動所需的頭文件dm9000.h:#include 再定義DM9000網(wǎng)卡設(shè)備的物理基地址,以便后面用到:/* DM9000AEP 10/100 ethernet controller */#define MACH_MINI2440_DM9K_BASE
40、(S3C2410_CS4 + 0x300)再填充該平臺設(shè)備的資源設(shè)置,以便和DM9000網(wǎng)卡驅(qū)動接口配合起來,如下static struct resource mini2440_dm9k_resource = 0 = .start = MACH_MINI2440_DM9K_BASE, .end = MACH_MINI2440_DM9K_BASE + 3, .flags = IORESOURCE_MEM , 1 = .start = MACH_MINI2440_DM9K_BASE + 4, .end = MACH_MINI2440_DM9K_BASE + 7, .flags = IORESOUR
41、CE_MEM , 2 = .start = IRQ_EINT7, .end = IRQ_EINT7, .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, ;/* * * The DM9000 has no eeprom, and its MAC address is set by* * * the bootloader before starting the kernel.* * */static struct dm9000_plat_data mini2440_dm9k_pdata = .flags = (DM9000_PLATF_16BIT
42、ONLY | DM9000_PLATF_NO_EEPROM),;static struct platform_device mini2440_device_eth = .name = dm9000, .id = -1, .num_resources = ARRAY_SIZE(mini2440_dm9k_resource), .resource = mini2440_dm9k_resource, .dev = .platform_data = &mini2440_dm9k_pdata, ,;/同時在mini2440設(shè)備集中添加上面做好的網(wǎng)卡平臺設(shè)備,如下紅色部分static struct pla
43、tform_device *mini2440_devices _initdata = &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &mini2440_device_eth, &s3c_device_nand,;這樣,DM9000平臺設(shè)備的接口就填完了。1.1.2調(diào)整DM9000所用的位寬寄存器因?yàn)長inux-的DM9000網(wǎng)卡驅(qū)動并不是專門為mini2440準(zhǔn)備的,所以還要在其源代碼中做一些移植工作,如下步驟。打開linux-/ dri
44、vers/net/dm9000.c,頭文件處添加2410相關(guān)的配置定義,如下#include #include #include #if defined(CONFIG_ARCH_S3C2410)#include #endif#include dm9000.h在dm9000設(shè)備的初始化函數(shù)中添加如下紅色部分,這里是配置DM9000所用片選總線的時序,因?yàn)閙ini2440目前只有一個通過總線外擴(kuò)的設(shè)備,在此設(shè)備驅(qū)動中直接修改相關(guān)的寄存器配置會更加容易理解一些,當(dāng)然這部分也可以放到mach-mini2440.c中(注意將這部分放在mach-mini2440.c里會有幾個常量需要自己找定義),你可以自
45、行實(shí)驗(yàn)一下,在此不再贅述。static int _init dm9000_init(void)#if defined(CONFIG_ARCH_S3C2410) unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON; unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4; *(volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & (316) | S3C24
46、10_BWSCON_DW4_16 |S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4; *(volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;#endif printk(KERN_INFO %s Ethernet Driver, V%sn, CARDNAME, DRV_VERSION); return platform_driver_register(&dm9000_driver);1.1.3關(guān)于MAC地址需要注意的是,本開發(fā)板所用的DM9000網(wǎng)卡并沒有外接EEPROM用以存儲MAC地址,因此系統(tǒng)中的MAC地址
47、是一個“軟”地址,也就是可以通過軟件進(jìn)行修改,可以隨意改為其他值,在static int _devinit dm9000_probe(struct platform_device *pdev)函數(shù)中可以看出: /* try reading the node address from the attached EEPROM */ /嘗試從EEPROM讀取MAC地址 for (i = 0; i dev_addr+i); if (!is_valid_ether_addr(ndev-dev_addr) & pdata != NULL) mac_src = platform data; memcpy(n
48、dev-dev_addr, pdata-dev_addr, 6); if (!is_valid_ether_addr(ndev-dev_addr) /* try reading from mac */ mac_src = chip; for (i = 0; i dev_addri = ior(db, i+DM9000_PAR); /使用“軟”MAC地址: 08:90:90:90:90:90 memcpy(ndev-dev_addr, x08x90x90x90x90x90, 6); if (!is_valid_ether_addr(ndev-dev_addr) dev_warn(db-dev, %s: Invalid ethernet MAC address. Please set using ifconfign, ndev-name);實(shí)際上到此為止DM9000就已經(jīng)移植結(jié)束了。1.1.4配置內(nèi)核加入DM9000,并編譯運(yùn)行測試此時會帶內(nèi)核源代碼目錄,執(zhí)行:#make menuconfig開始在內(nèi)核中配置網(wǎng)卡驅(qū)動,依次選擇如下
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《商業(yè)插畫創(chuàng)意與表現(xiàn)》課件-【5】商業(yè)插畫的材料與表現(xiàn)技法
- 一體化污水處理設(shè)備采購安裝及運(yùn)維 投標(biāo)方案(技術(shù)方案)
- 三農(nóng)村基層教育資源配置與優(yōu)化方案
- 教育行業(yè)教師培訓(xùn)與成長計劃
- 水利工程安全措施實(shí)施方案
- 工作計劃執(zhí)行跟蹤表格:工作計劃執(zhí)行情況統(tǒng)計表
- 新能源汽車充電樁政策
- 中國醫(yī)療器械行業(yè)研究報告
- 智能交通系統(tǒng)舉例10個
- 辦公I(xiàn)T系統(tǒng)使用教程
- TD/T 1069-2022 國土空間生態(tài)保護(hù)修復(fù)工程驗(yàn)收規(guī)范(正式版)
- 踝關(guān)節(jié)扭傷康復(fù)治療
- FZ∕T 01085-2018 粘合襯剝離強(qiáng)力試驗(yàn)方法
- 白龍江引水工程環(huán)境影響報告書(公示版)
- 《短視頻拍攝與制作》課件-3短視頻中期拍攝
- 瀏陽煙花術(shù)語大全
- 五星級酒店前廳管理常用表格
- 居民心理健康知識講座課件
- 2024年英語專業(yè)四級考試真題及詳細(xì)答案
- 成語故事葉公好龍
- MHT:中小學(xué)生心理健康檢測(含量表與評分說明)
評論
0/150
提交評論