为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Linux-2.6.24内核移植文档

2011-10-17 18页 doc 563KB 31阅读

用户头像

is_826146

暂无简介

举报
Linux-2.6.24内核移植文档Linux内核移植文档 V3.0 edaworld整理 【Target DevBoard】 Board: FS2410 CPU: S3C2410X SDRAM: HY57V561620(64MB) FLASH: K9F1208(64MB) NET: CS8900 【HOST PC】 Linux Realse Version: Fedora Core 7 (FC7) CrossCompiler: arm-linux-gcc3.4.1 with softfloat 第一部分:移植内核及NAND分区 【移植步骤】 1. 解压linu...
Linux-2.6.24内核移植文档
Linux内核移植文档 V3.0 edaworld整理 【Target DevBoard】 Board: FS2410 CPU: S3C2410X SDRAM: HY57V561620(64MB) FLASH: K9F1208(64MB) NET: CS8900 【HOST PC】 Linux Realse Version: Fedora Core 7 (FC7) CrossCompiler: arm-linux-gcc3.4.1 with softfloat 第一部分:移植内核及NAND分区 【移植步骤】 1. 解压linux-2.6.24。 2. 编辑Makefile,修改目标cpu体系结构和交叉编译工具的路径。 [root @localhost linux-2.6.24]$ gedit Makefile 第193行改为: ARCH ?= arm CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux- CROSS_COMPILE根据自己所使用的交叉编译器路径设置。 3. 复制编译配置文件到linux-2.6.24下面。移植过程以smdk2410开发板为模板。 [root @localhostlinux-2.6.24]$cp arch/arm/configs/s3c2410_defconfig .config 4. 修改NandFlash分区信息。 [root @localhostlinux-2.6.24]$gedit arch/arm/plat-s3c24xx/common-smdk.c 第108行smdk_default_nand_part[]修改如下: static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name="BootLoader", .size=0x60000, .offset=0, }, [1] = { .name="Kernel", .size=(0x200000-0x60000), .offset=0x60000, }, [2] = { .name="RootFile", .size=62 * SZ_1M , .offset=SZ_2M, // mask_flags: MTD_WRITEABLE, } }; 这里面修改成了三个分区,分别是bootloader,kernel和roogfilesystem分区。 5.为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统。编辑fs/Kconfig: 在902行menu "Pseudo filesystems"下面添加如下代码: config DEVFS_FS bool "/dev file system support (OBSOLETE)" default y config DEVFS_MOUNT bool "Automatically mount at boot" default y depends on DEVFS_FS DEVFS在linux2.6.15以后取消了支持,此处为冗余的操作。 6.OK,现在先编译一下内核。下载到目标板看看内核能否启动。 [root @localhost linux-2.6.24]$ make menuconfig 在配置菜单中,选择system type-->s3c2410 machines中的smdk2410 其他的arch-machines全部取消。 [root @localhost linux-2.6.24]$ make zImage 编译完成后在arch/arm/boot下会有一个zImage [root @localhost linux-2.6.24]$ cd arch/arm/boot [root @localhost boot]$ ls bootp compressed Image install.sh Makefile zImage 通过uboot把zImage加载到SDRAM的0x30008000处,并执行go 0x30008000。会看到以下启动信息。 AK-47#> TFTP from server 192.168.0.102; our IP address is 192.168.0.69 Filename 'uImage'. Load address: 0x30008000 Loading: ########################################################################################################## done Starting kernel ... Uncompressing Linux.................................................................................................... done, booting the kernel. Linux version 2.6.24 (root @localhost.localdomain) (gcc version 4.1.1) #1 Sat Mar 29 16:42:31 CST 2008 CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177 Machine: SMDK2410 …… S3C24XX NAND Driver, (c) 2004 Simtec Electronics s3c2410-nand s3c2410-nand: Tacls=3, 30ns Twrph0=7 70ns, Twrph1=3 30ns NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit) Scanning device for bad blocks Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x00000000-0x00060000 : "Uboot" 0x00060000-0x00200000 : "Kernel-2.6.24" 0x00200000-0x04000000 : "RootFileSystem" …… 第二部分 移植网卡CS8900驱动 【移植步骤】 在之前的内核移植基础上,继续进行CS8900网卡驱动移植。 1. 将准备好的cs8900.c, cs8900.h复制到drivers/net/arm文件夹下。 2. 在/linux-2.6.24/include/asm-arm/arch-s3c2410下面新建文件smdk2410.h [root @localhost arch-s3c2410]$ pwd /linux-2.6.24/include/asm-arm/arch-s3c2410 [root @localhost arch-s3c2410]$ gedit smdk2410.h 添加如下代码: #define pSMDK2410_ETH_IO __phys_to_pfn(0x19000000) #define vSMDK2410_ETH_IO 0xE0000000 #define SMDK2410_EHT_IRQ IRQ_EINT9 这些宏在cs8900.c中要用到。 3. 修改/linux-2.6.24/arch/arm/arch-s3c2410/mach-smdk2410.c. [root @localhost mach-s3c2410]$ pwd /linux-2.6.24/arch/arm/mach-s3c2410 [root @localhost mach-s3c2410]$ gedit mach-smdk2410.c 在头部包含建立的刚才建立的头文件smdk2410.h #include "asm/arch/smdk2410.h” 在map_desc smdk2410_iodesc[]中添加cs8900的对于的io空间映射 static struct map_desc smdk2410_iodesc[] __initdata = { /* nothing here yet */ { vSMDK2410_ETH_IO , pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE }, }; 4. 在/drivers/net/arm/Kconfig中增加menu config中CS8900编译选项 [root @localhost arm]$ pwd /linux-2.6.24/drivers/net/arm [root @localhost arm]$ gedit Kconfig config ARM_CS8900 tristate "CS8900 support" depends on NET_ETHERNET && ARM && ARCH_SMDK2410 help Support for CS8900A chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO,available from as well as .To compile this driver as a module, choose M here and read .The module will be called cs8900.o. 这样,在编译配置菜单”make menuconfig”中的Device Drivers下Network Device Support 下Ethernet( 10M or 100Mbit)中就可以找到”CS8900 support”的选项了。 5. 在/drivers/net/arm/Makefile中添加 obj-$(CONFIG_ARM_CS8900) += cs8900.o 6. 执行menu config。 Device drivers->network device support->Ethernet中选择(*)CS8900 support. 7. 编译内核 make zImage 8. 将生成的zImage重新download到开发板SDRAM中再来看看启动信息。 …… Cirrus Logic CS8900A driver for Linux (Modified for SMDK2410) eth0: CS8900A rev E at 0xe0000300 irq=53, addr: 00: 0:3E:26:0A: 0 …… 如果有如上信息出现,说明启动成功。 第三部分 移植3.5寸LCD驱动 【移植步骤】 从启动信息可以看出没有加载成功LCD驱动 io scheduler cfq registered s3c2410-lcd s3c2410-lcd: no platform data for lcd, cannot attach s3c2410-lcd: probe of s3c2410-lcd failed with error -22 lp: driver loaded but no devices found LCD为三星的3.5寸TFT屏. 分辨率320x240 1.​ 修改文件/linux2.6.24/arch/arm/mach-s3c2410/mach-smdk2410.c加入头文件#include 2.​ 添加代码 static struct s3c2410fb_display nano2410_lcd_cfg[] __initdata = { { .lcdcon5 = (1<<11) | (1<<10) | (1<<9) | (1<<8) | (0<<7) | (1<<5) | (1<<3) |(0<<1) | (1), .type = S3C2410_LCDCON1_TFT, .width = 320, .height = 240, .pixclock = 270000, /* HCLK/10 */ .xres = 320, .yres = 240, .bpp = 16, .left_margin = 16, .right_margin = 59, .hsync_len = 9, .upper_margin = 2, .lower_margin = 6, .vsync_len = 16, } }; static struct s3c2410fb_mach_info nano2410_fb_info __initdata = { .displays = nano2410_lcd_cfg, .num_displays = ARRAY_SIZE(nano2410_lcd_cfg), .default_display = 0, .lpcsel = ((0xCE6) & ~7) | 1<<4, .gpccon = 0xaaaaaaaa, .gpccon_mask = 0xffffffff, .gpcup = 0xffffffff, .gpcup_mask = 0xffffffff, .gpdcon = 0xaaaaaaaa, }; 3.在函数smdk2410_init()中加入 s3c24xx_fb_set_platdata(&nano2410_fb_info); 在内核配置时,启用graphic device里面的frambuffer.并打开boot logo 重新编译内核,看看启动信息 …… io scheduler cfq registered Console: switching to colour frame buffer device 30x40 fb0: s3c2410fb frame buffer device …… 同时可以看到LCD上出现了一只可爱的小企鹅~~~ 第四部分 移植触摸屏驱动 【移植步骤】 移植触摸屏驱动 1.include\asm-arm\arch下面添加ts.h 2.在arch\arm\mach-s3c2410下面的mach-smdk2410.c 添加头文件#include 添加内容 struct platform_device s3c_device_ts = { .name = "EmbedSky-ts", .id = -1, }; static struct EmbedSky_ts_mach_info EmbedSky_ts_info = { .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, &s3c_device_rtc, &s3c_device_ts, }; static void __init smdk2410_init(void) { platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices)); smdk_machine_init(); s3c24xx_fb_set_platdata(&nano2410_fb_info); s3c_device_ts.dev.platform_data = &EmbedSky_ts_info; } 3.include\asm-arm\hardware下面添加clock.h 4.drivers\input下面添加tsdev.c 同时在makefile中添加 obj-$(CONFIG_INPUT) += input-core.o input-core-objs := input.o ff-core.o obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o obj-$(CONFIG_INPUT_JOYDEV) += joydev.o obj-$(CONFIG_INPUT_EVDEV) += evdev.o obj-$(CONFIG_INPUT_EVBUG) += evbug.o obj-$(CONFIG_INPUT_TSDEV) += tsdev.o obj-$(CONFIG_INPUT_KEYBOARD) += keyboard/ obj-$(CONFIG_INPUT_MOUSE) += mouse/ obj-$(CONFIG_INPUT_JOYSTICK) += joystick/ obj-$(CONFIG_INPUT_TABLET) += tablet/ obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/ obj-$(CONFIG_INPUT_MISC) += misc/ 同时在kconfig中添加116行开始 config INPUT_TSDEV tristate "Touchscreen interface" ---help--- Say Y here if you have an application that only can understand the Compaq touchscreen protocol for absolute pointer data. This is useful namely for embedded configurations. If unsure, say N. To compile this driver as a module, choose M here: the module will be called tsdev. config INPUT_TSDEV_SCREEN_X int "Horizontal screen resolution" depends on INPUT_TSDEV default "1024" config INPUT_TSDEV_SCREEN_Y int "Vertical screen resolution" depends on INPUT_TSDEV default "768" 5.drivers\input\touchscreen下面添加EmbedSky_ts.c 同时在makefile中添加 obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o #obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o obj-$(CONFIG_EmbedSky_TOUCHSCREEN) += EmbedSky_ts.o 在kconfig277行添加 config EmbedSky_TOUCHSCREEN tristate "EmbedSky touchscreen" depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN select SERIO help To compile this driver as a module, choose M here: the module will be called EmbedSky_ts.ko. config TOUCHSCREEN_EmbedSky_DEBUG boolean "EmbedSky touchscreen debug messages" depends on EmbedSky_TOUCHSCREEN help Select this if you want debug messages 6.include\linux下面interrupt.h中添加 static inline unsigned long __deprecated deprecated_irq_flag(unsigned long flag) { return flag; } #define SA_INTERRUPT deprecated_irq_flag(IRQF_DISABLED) #define SA_SAMPLE_RANDOM deprecated_irq_flag(IRQF_SAMPLE_RANDOM) #define SA_SHIRQ deprecated_irq_flag(IRQF_SHARED) #define SA_PROBEIRQ deprecated_irq_flag(IRQF_PROBE_SHARED) #define SA_PERCPU deprecated_irq_flag(IRQF_PERCPU) #define SA_TRIGGER_LOW deprecated_irq_flag(IRQF_TRIGGER_LOW) #define SA_TRIGGER_HIGH deprecated_irq_flag(IRQF_TRIGGER_HIGH) #define SA_TRIGGER_FALLING deprecated_irq_flag(IRQF_TRIGGER_FALLING) #define SA_TRIGGER_RISING deprecated_irq_flag(IRQF_TRIGGER_RISING) #define SA_TRIGGER_MASK deprecated_irq_flag(IRQF_TRIGGER_MASK) 7.drivers\char下面添加mini2440_adc.c,s3c24xx-adc.h makefile中添加114行 obj-$(CONFIG_MINI2440_ADC) += mini2440_adc.o kconfig中添加 config MINI2440_ADC bool "ADC driver for FriendlyARM Mini2440/QQ2440 development boards" default y help this is ADC driver for FriendlyARM Mini2440/QQ2440 development boards Notes: the touch-screen-driver required this option 编译可以input下面看到ts0设备节点,通过上面的移植,也实现了adc与触摸屏的共用。 附触摸屏选择菜单: Device Drivers下面input device support菜单: 第五部分 移植yaffs2文件系统 【移植步骤】 从http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/获取源代码yaffs_source.tar.gz,解压到Development目录,里面有两个子目录,yaffs和yaffs2,使用yaffs2下面的代码。 YAFFS2(Yet Another nandFlash FileSytem2)是专门针对NAND设备的一种文件系统。 YAFFS2类似于JFFS/JFFS2文件系统,与YAFFS2不同的是JFFSS1 /2文件系统最初是针对NOR FLASH的应用场合设计的。而YAFFS2针对NAND FLASH的特点采用增强的碎片回收和均衡磨损技术,大大提高了读写速度,延长了存储设备的使用寿命,可以更好的支持大容量的NAND FLASH芯片。而且在断电可靠性上,YAFFS2的优势更加明显。, 1.​ 得到yaffs2.tar.gz源码包,解压源码。 2.​ 在fs下面的kconfig中添加 添加位置在menu "Miscellaneous filesystems"下面 # Patched by YAFFS source "fs/yaffs2/Kconfig" config JFFS_FS tristate "Journalling Flash File System (JFFS) support" depends on MTD help JFFS is the Journaling Flash File System developed by Axis Communications in Sweden, aimed at providing a crash/powerdown-safe file system for disk-less embedded devices. Further information is available at (). 3.​ 在fs下面的Makefile中添加 # Patched by YAFFS obj-$(CONFIG_YAFFS_FS) += yaffs2/ 4.然后将解压缩后的yaffs2代码放到fs文件夹下面。再次进行make menuconfig的配置。 File systems->Miscellaneous filesystems 目录,配置信息如下: 4.​ 重新编译,得到zImage文件后拷贝到tftpboot下载观察(前提为制作根文件系统成功后) 可以看到内核支持了yaffs文件系统。同时,可以mount一个分区进行创建文件、删除文件操作。
/
本文档为【Linux-2.6.24内核移植文档】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索