微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于飞凌2440开发板的linux-2.6.28移植过程

基于飞凌2440开发板的linux-2.6.28移植过程

时间:11-25 来源:互联网 点击:

其中有一些需要修改源码的地方会在下面说明。
9. 保存配置并退出xconfig,生成zImage文件 #make zImage
复制代码OK,将生成的zImage文件烧到开发板上就可以了。

(1). 启动
|---Boot options| |---Default kernel command string: [root=/dev/mtdblock3 rootfstype=cramfs init=/linuxrc console=ttySAC0,115200
devfs=mount mem=64]
分析:
/dev/mtdblock3 : 表示MTD分区的第3个分区存储根文件系统
rootfstype=cramfs : 分区是cramfs类型,这项不加应该关系不大
init=/linuxrc : 启动的首个脚本即根目录下的linuxrc
console=ttySAC0,115200 : 使用串口1作为串口调试,波特率设置为115200; 现在已经摒弃了以前使用ttyS0的写法
devfs=mount : 在/sbin/init运行之前能自动挂载/dev为devfs文件系统
mem=64 : 存储器大小为64M

(2).LCD支持.
修改mach-smdk2410.c文件,添加:

static struct s3c2410fb_display smdk2410_lcd_cfg __initdata = {

.lcdcon5 = S3C2410_LCDCON5_FRM565 |

S3C2410_LCDCON5_INVVLINE |

S3C2410_LCDCON5_INVVFRAME |

S3C2410_LCDCON5_PWREN |

S3C2410_LCDCON5_HWSWP,

.type = S3C2410_LCDCON1_TFT,

.width = 320,

.height = 240,

.pixclock = 270000,

.xres = 320,

.yres = 240,

.bpp = 16,

.left_margin =8,

.right_margin = 5,

.hsync_len = 63,

.upper_margin = 15,

.lower_margin = 3,

.vsync_len = 5,

};

static struct s3c2410fb_mach_info smdk2410_fb_info __initdata = {

.displays = &smdk2410_lcd_cfg,

.num_displays = 1,

.default_display = 0,

#if 0

.gpccon = 0xaa940659,

.gpccon_mask = 0xffffffff,

.gpcup = 0x0000ffff,

.gpcup_mask = 0xffffffff,

.gpdcon = 0xaa84aaa0,

.gpdcon_mask = 0xffffffff,

.gpdup = 0x0000faff,

.gpdup_mask = 0xffffffff,

#endif

.lpcsel = 0, //((0xCE6) & ~7) | 1<4,

};
复制代码(2)添加对SD卡支持
修改mach-smdk2410.c文件添加:&s3c_device_sdi,
(3)对128Mflash支持
修改/linux-2.6.28.7/drivers/mtd/nand下面的nand_bbt.c文件: static struct nand_bbt_descr largepage_memorybased = {

.options = 0,

.offs = 0,

.len = 2, // 支持128M修改为1

.pattern = scan_ff_pattern

};

static struct nand_bbt_descr largepage_flashbased = {

.options = NAND_BBT_SCAN2NDPAGE,

.offs = 0,

.len = 2, // 支持128M修改为1

.pattern = scan_ff_pattern

};
复制代码(4)修改对dm9000网卡支持
a.修改 drivers/net/dm9000.c 文件:
头文件增加:

#include //by bai

#include

#include

复制代码在dm9000_probe 函数开始增加:

unsigned char ne_def_eth_mac_addr[]={0x00,0x12,0x34,0x56,0x80,0x49};

static void *bwscon;

static void *gpfcon;

static void *extint0;

static void *intmsk;

#define BWSCON (0x48000000)

#define GPFCON (0x56000050)

#define EXTINT0 (0x56000088)

#define INTMSK (0x4A000008)

bwscon=ioremap_nocache(BWSCON,0x0000004);

gpfcon=ioremap_nocache(GPFCON,0x0000004);

extint0=ioremap_nocache(EXTINT0,0x0000004);

intmsk=ioremap_nocache(INTMSK,0x0000004);

writel(readl(bwscon)|0xc0000,bwscon);

writel( (readl(gpfcon) & ~(0x3 < 14)) | (0x2 < 14), gpfcon);

writel( readl(gpfcon) | (0x1 < 7), gpfcon); // Disable pull-up

writel( (readl(extint0) & ~(0xf < 28)) | (0x4 < 28), extint0); //rising edge

writel( (readl(intmsk)) & ~0x80, intmsk);

复制代码在这个函数的最后需要修改: if (!is_valid_ether_addr(ndev->dev_addr)) {

mac_src = "chip";

for (i = 0; i < 6; i++)

//ndev->dev_addr[i] = ior(db, i+DM9000_PAR); //by bai

ndev->dev_addr[i] = ne_def_eth_mac_addr[i];

}
复制代码b.修改arch/arm/mach-s3c2410/mach-smdk2410.c
在static struct platform_device *smdk2410_devices[] __initdata中添加: &s3c_device_dm9000,

static struct map_desc smdk2410_iodesc[] __initdata = {

[0] = {

.virtual = (unsigned long)S3C24XX_VA_DM9000,

.pfn = __phys_to_pfn(S3C24XX_PA_DM9000),

.length = SZ_1M,

.type = MT_DEVICE,

},

};
复制代码c.vi arch/arm/plat-s3c24xx/devs.c
添加头文件 #include

static struct resource s3c_dm9000_resource[] = {

[0] = {

.start = S3C24XX_PA_DM9000,

.end = S3C24XX_PA_DM9000+ 0x3,

.flags = IORESOURCE_MEM

},

[1]={

.start = S3C24XX_PA_DM9000 + 0x4, //CMD pin is A2

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top