(1)移植framebuffer drivers/video 复制samsung文件夹到cupcake内核
line236 增加 config FB_S3C tristate "S3C Framebuffer Support" select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT depends on FB && (ARCH_S3C64XX || ARCH_S5PC1XX)
default n ---help--- TBA
choice depends on FB_S3C prompt "Select LCD Type" default FB_S3C_LTE480WV config FB_S3C_LTE480WV bool "LTE480WV/LTP700WV" ---help--- TBA
config FB_URBETTER_INNOLUX430 bool "Urbetter INNOLUX430" ---help--- TBA
config FB_S3C_LW500 bool "LW500" ---help--- TBA
config FB_S3C_LTV350QV bool "LTV350QV" ---help--- TBA
config FB_S3C_LTS222QV bool "LTS222QV" ---help--- TBA
endchoice
config FB_S3C_BPP tristate "Advanced options for S3C Framebuffer" depends on FB_S3C default n ---help--- TBA
choice depends on FB_S3C_BPP prompt "Select BPP(Bits Per Pixel)" default FB_S3C_BPP_16 config FB_S3C_BPP_8 bool "8 BPP" ---help--- TBA
config FB_S3C_BPP_16 bool "16 BPP" ---help--- TBA
config FB_S3C_BPP_24 bool "24 BPP" ---help--- TBA
config FB_S3C_BPP_32 bool "32 BPP" ---help--- TBA endchoice
config FB_S3C_NUM int "Number of Framebuffers" depends on FB_S3C_BPP && (ARCH_S3C64XX || ARCH_S5PC1XX) default "1" ---help--- TBA
config FB_S3C_VIRTUAL_SCREEN bool "Enable Virtual Screen" depends on FB_S3C_BPP
default n ---help--- TBA
config FB_S3C_DOUBLE_BUFFERING bool "Enable Double Buffering" depends on FB_S3C_BPP
default n ---help--- TBA
修改Makefile add obj-$(CONFIG_FB_S3C) += samsung/
makemenuconfig *** Frame buffer hardware drivers *** │ │ │ │ <*> S3C Framebuffer Support │ │ │ │ Select LCD Type (Urbetter INNOLUX430) ---> │ │ │ │ <*> Advanced options for S3C Framebuffer │ │ │ │ Select BPP(Bits Per Pixel) (16 BPP) ---> │ │ │ │ (1) Number of Framebuffers (NEW) │ │ │ │ [*] Enable Virtual Screen │ │ │ │ [*] Enable Double Buffering
( ) LTE480WV/LTP700WV │ │ │ │ (X) Urbetter INNOLUX430 │ │ │ │ ( ) LW500 │ │ │ │ ( ) LTV350QV │ │ │ │ ( ) LTS222QV
OK
(2)移植nand驱动 复制s3c_nand.c
修改Kconfig config MTD_NAND_S3C tristate "NAND Flash support for S3C SoC" depends on ARCH_S3C64XX && MTD_NAND help This enables the NAND flash controller on the S3C.
No board specfic support is done by this driver, each board must advertise a platform_device for the driver to attach.
config MTD_NAND_S3C_DEBUG bool "S3C NAND driver debug" depends on MTD_NAND_S3C help Enable debugging of the S3C NAND driver
config MTD_NAND_S3C_HWECC bool "S3C NAND Hardware ECC" depends on MTD_NAND_S3C help Enable the use of the S3C's internal ECC generator when using NAND. Early versions of the chip have had problems with incorrect ECC generation, and if using these, the default of software ECC is preferable.
If you lay down a device with the hardware ECC, then you will currently not be able to switch to software, as there is no implementation for ECC method used by the S3C
修改makefile obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand.o
启动后
S3C NAND Driver, (c) 2008 Samsung Electronics S3C NAND Driver is using hardware ECC. NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit) Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit": 0x00000000-0x00080000 : "Bootloader" 0x00080000-0x00880000 : "Kernel" 0x00880000-0x08880000 : "File System" 0x08880000-0x10000000 : "User" mice: PS/2 mouse device common for all mice TCP cubic registered NET: Registered protocol family 17 drivers/rtc/hctosys.c: unable to open rtc device (rtc0) VFS: Cannot open root device "mtdblock2" or unknown-block(31,2) Please append a correct "root=" boot option; here are the available partitions: 1f00 512 mtdblock0 (driver?) 1f01 8192 mtdblock1 (driver?) 1f02 131072 mtdblock2 (driver?) 1f03 122368 mtdblock3 (driver?) Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
还是不能加载mtdblock2 ???
原来是没有选上yaffs2支持,重新编译内核,已经可以加载原先烧录在板子上的android0.09内核
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit) Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit": 0x00000000-0x00080000 : "Bootloader" 0x00080000-0x00880000 : "Kernel" 0x00880000-0x08880000 : "File System" 0x08880000-0x10000000 : "User" mice: PS/2 mouse device common for all mice TCP cubic registered NET: Registered protocol family 17 drivers/rtc/hctosys.c: unable to open rtc device (rtc0) yaffs: dev is 32505858 name is "mtdblock2" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.2, "mtdblock2" s3c-nand: ECC uncorrectable error detected block 791 is bad yaffs_read_super: isCheckpointed 0 VFS: Mounted root (yaffs2 filesystem). Freeing init memory: 128K init: HOW ARE YOU GENTLEMEN init: reading config file init: device init init: mtd partition -1, init: mtd partition 0, "Bootloade init: mtd partition 1, "Kernel" init: mtd partition 2, "File init: mtd partition 3, "User" sh: can't access tty; job control turned off #
(3)移植触摸屏驱动 复制/drivers/input/touchscreen s3c-ts.c
Kconfig中添加 config TOUCHSCREEN_S3C tristate "S3C touchscreen driver" depends on ARCH_S3C2410 || ARCH_S3C64XX || ARCH_S5PC1XX default y help Say Y here to enable the driver for the touchscreen on the S3C SMDK board.
If unsure, say N.
To compile this driver as a module, choose M here: the module will be called s3c_ts.
config TOUCHSCREEN_NEW bool "new flip touch" depends on TOUCHSCREEN_S3C default y help Say Y here to enable the driver for the new version touchscreen on the S3C SMDK board.
Say N here to enable the driver for the old version touchscreen on the S3C SMDK board.
Makefile中添加 obj-$(CONFIG_TOUCHSCREEN_S3C) += s3c-ts.o
make menuconfig中添加 --- Touchscreens │ │ │ │ <*> S3C touchscreen driver │ │ │ │ [*] new flip touch
开机提示: S3C Touchscreen driver, (c) 2008 Samsung Electronics S3C TouchScreen got loaded successfully : 12 bits input: S3C TouchScreen as /class/input/input0
测试OK
(4)移植DM9000网卡驱动,这是最痛苦的部分!因为2.6.29内核没有做,得从开发板提供的2.6.24内核中移植,但是开发板这一块写的很不标准,用了很多24xx的头文件,导致移植非常痛苦。
1)这是正确的加载内容,参考 dm9000 Ethernet Driver eth%d: con201 Invalid ethernet MAC address. using default config, Please set using ifconfig eth0: dm9000 at f7200300,f7200304 IRQ 71 MAC: 00:e0:4a:bc:15:e7
2)从开发板提供的2.6.24内核中将dm9000_con201.c提出,编译,发现问题
CHK include/linux/compile.h CC drivers/net/dm9000_con201.o drivers/net/dm9000_con201.c:74:31: error: asm/arch/regs-irq.h: No such file or directory drivers/net/dm9000_con201.c:75:31: error: asm/arch/regs-mem.h: No such file or directory drivers/net/dm9000_con201.c:76:32: error: asm/arch/regs-gpio.h: No such file or directory drivers/net/dm9000_con201.c: In function 'dm9000_probe': drivers/net/dm9000_con201.c:417: error: 'S3C_SROM_BW' undeclared (first use in this function) drivers/net/dm9000_con201.c:417: error: (Each undeclared identifier is reported only once drivers/net/dm9000_con201.c:417: error: for each function it appears in.) drivers/net/dm9000_con201.c:422: error: 'S3C_SROM_BC1' undeclared (first use in this function) drivers/net/dm9000_con201.c:425: error: 'S3C_GPNCON' undeclared (first use in this function) drivers/net/dm9000_con201.c:426: error: 'S3C_GPNPU' undeclared (first use in this function) drivers/net/dm9000_con201.c:428: error: 'S3C_EINT0CON0' undeclared (first use in this function) drivers/net/dm9000_con201.c:430: error: 'S3C_EINTFLTCON0' undeclared (first use in this function) drivers/net/dm9000_con201.c:432: error: 'S3C_EINTPEND' undeclared (first use in this function) drivers/net/dm9000_con201.c:433: error: 'S3C_EINT0MASK' undeclared (first use in this function) make[2]: *** [drivers/net/dm9000_con201.o] 错误 1 make[1]: *** [drivers/net] 错误 2 make: *** [drivers] 错误 2 [kyon@SEP4020 kernel-6410]$
需要这3个头文件 drivers/net/dm9000_con201.c:74:31: error: asm/arch/regs-irq.h: No such file or directory drivers/net/dm9000_con201.c:75:31: error: asm/arch/regs-mem.h: No such file or directory drivers/net/dm9000_con201.c:76:32: error: asm/arch/regs-gpio.h: No such file or directory
3)继续出现问题
CHK include/linux/compile.h CC drivers/net/dm9000_con201.o drivers/net/dm9000_con201.c: In function 'dm9000_probe': drivers/net/dm9000_con201.c:419: error: 'S3C24XX_VA_SROMC' undeclared (first use in this function) drivers/net/dm9000_con201.c:419: error: (Each undeclared identifier is reported only once drivers/net/dm9000_con201.c:419: error: for each function it appears in.) drivers/net/dm9000_con201.c:427: error: 'S3C24XX_VA_GPIO' undeclared (first use in this function) make[2]: *** [drivers/net/dm9000_con201.o] 错误 1 make[1]: *** [drivers/net] 错误 2 make: *** [drivers] 错误 2 [kyon@SEP4020 kernel-6410]$
这里有问题,经过测试要添加如下内容 //add by kyon #define S3C24XX_VA_SROMC S3C_VA_SROMC #define S3C24XX_VA_GPIO S3C64XX_VA_GPIO//S3C_VA_GPIO //add end
4)发现需要在arch/arm中添加启动信息 plat-smdk64xx目录的dev. c //add by kyon #include <linux/dm9000.h>
#define S3C_VA_DM9000nc1 S3C_ADDR(0x03200300) #define S3C24XX_VA_DM9000CS1 S3C_VA_DM9000nc1 #define S3C24XX_SZ_DM9000CS1 SZ_1M
#define DM9000_ETH_IRQ_EINT0 S3C_EINT(7)//IRQ_EINT7 //这儿要注意!原来的IRQ_EINT7一定要改掉!
static struct resource dm9000_resources_cs1[] = { [0] = { .start = S3C24XX_VA_DM9000CS1, .end = (S3C24XX_VA_DM9000CS1+ S3C24XX_SZ_DM9000CS1), .flags = IORESOURCE_MEM, }, [1] = { .start = (DM9000_ETH_IRQ_EINT0), .end = (DM9000_ETH_IRQ_EINT0), .flags = IORESOURCE_IRQ, }, };
static struct dm9000_plat_data dm9000_setup_cs1 = { .flags = DM9000_PLATF_16BITONLY };
struct platform_device s3c_device_dm9000_cs1 = { .name = "dm9000_con201", .id = 0, .num_resources = ARRAY_SIZE(dm9000_resources_cs1), .resource = dm9000_resources_cs1, .dev = { .platform_data = &dm9000_setup_cs1, } };
EXPORT_SYMBOL(s3c_device_dm9000_cs1);
还要修改文件mach-smdk6410.c 一些定义,又重复定义了,应该放在一个通用的头文件中 //kyon extern struct platform_device s3c_device_dm9000_cs1;
#define S3C_VA_DM9000nc1 S3C_ADDR(0x03200300)
#define S3C24XX_VA_DM9000CS1 S3C_VA_DM9000nc1 #define S3C6400_PA_DM9000CS1 (0x18000300) #define S3C24XX_SZ_DM9000CS1 SZ_1M
在启动结构体中添加 static struct platform_device *smdk6410_devices[] __initdata = &s3c_device_dm9000_cs1,
还要添加地址映射: static struct map_desc smdk6410_iodesc[] __initdata = { { .virtual = (u32)S3C24XX_VA_DM9000CS1, .pfn = __phys_to_pfn(S3C6400_PA_DM9000CS1), .length = S3C24XX_SZ_DM9000CS1, .type = MT_DEVICE, }, };
前面没进行地址映射,开机不断内核崩溃,做到这里终于不内核内核崩溃
dm9000 Ethernet Driver dm9000: dm9000_probe()dm9000: dm9000x: resetting eth%d: con201 Invalid ethernet MAC address. using default config, Please set using ifconfig eth0: dm9000 at f7200300,f7200304 IRQ 71 MAC: 00:e0:4a:bc:15:e7
可惜还是不能挂载NFS dm9000: entering dm9000_open IP-Config: Failed to open eth0 IP-Config: No network devices available. VFS: Cannot open root device "nfs" or unknown-block(0,255)
最后正确的配置中断号,网卡终于通了! dm9000 Ethernet Driver eth%d: con201 Invalid ethernet MAC address. using default config, Please set using ifconfig eth0: dm9000 at f7200300,f7200304 IRQ 108 MAC: 00:e0:4a:bc:15:e7
dm9000 Ethernet Driver eth%d: con201 Invalid ethernet MAC address. using default config, Please set using ifconfig eth0: dm9000 at f7200300,f7200304 IRQ 108 MAC: 00:e0:4a:bc:15:e7 Driver 'sd' needs updating - please use bus_type methods S3C NAND Driver, (c) 2008 Samsung Electronics S3C NAND Driver is using hardware ECC. NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit) Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit": 0x00000000-0x00080000 : "Bootloader" 0x00080000-0x00880000 : "Kernel" 0x00880000-0x08880000 : "File System" 0x08880000-0x10000000 : "User" mice: PS/2 mouse device common for all mice S3C Touchscreen driver, (c) 2008 Samsung Electronics S3C TouchScreen got loaded successfully : 12 bits input: S3C TouchScreen as /class/input/input0 TCP cubic registered NET: Registered protocol family 17 NET: Registered protocol family 15 RPC: Registered udp transport module. RPC: Registered tcp transport module. drivers/rtc/hctosys.c: unable to open rtc device (rtc0) VFS: Mounted root (cramfs filesystem) readonly. Freeing init memory: 136K init started: BusyBox v1.10.4 (2009-05-18 19:40:33 CST) starting pid 236, tty '': '/etc/init.d/rcS'
********************************************** SEP4020 ARM Linux-2.6.16(VERSION4.0) busybox1.10.4 ********************************************** # mount all........... # Starting mdev......... starting pid 244, tty '': '-/bin/sh' / # ifconfig eth0 192.168.0.4 eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 / # ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: seq=0 ttl=128 time=6.160 ms 64 bytes from 192.168.0.1: seq=1 ttl=128 time=0.348 ms 64 bytes from 192.168.0.1: seq=2 ttl=128 time=0.344 ms 64 bytes from 192.168.0.1: seq=3 ttl=128 time=0.349 ms 64 bytes from 192.168.0.1: seq=4 ttl=128 time=0.338 ms 64 bytes from 192.168.0.1: seq=5 ttl=128 time=0.345 ms 64 bytes from 192.168.0.1: seq=6 ttl=128 time=0.305 ms |