在学习迷你2440过程中的总结

make disclean 清楚配置中间文件
默认平台是x86的,配置为arm时应该在menuconfig后ARCH=arm 编译器是CROSS_COMPILE=arm-linux
1.首先配置根目录下的makefile,环境设置为arm,输入交叉编译器的全路径
先装交叉编译器、查看交叉编译器的版本 arm-linuc-gcc -v     source  /etc/profile,先修改全局的Makefile,指定交叉编译器最好带全路径名称,vim查看代码是彩色的
2.修改机器码,克隆自己的平台,在U-boot/include/asm-arm/mach-types.h中可以查看机器码,机器码在内核在linux-2.6.32.2、arch/arm/tools/mach-types文件中
3.进入arch/arm/tools/marh-2440,cp marh-smdk2440.c marh-XXXX2440,进入修改代码MACHINE_START(S4C2440,"SMDK2440...")前边是开发板名称,后面是开发板信息
4.修改时钟配置,在arch/arm/mach-s3c2440/mach-smdk2440.c,把smdk_machine_init()注释掉,从新编写自己的初始化函数
因为是制作自己的平台体系,所以用批命令把所有smdk2440名称都改成MINI2440的名字,批处理命令 %s/smdk2440/mini2440/g global全局
5.使用官方自带的mini2440的配置,然后生成zImage,位于arch/arm/boot目录下


.配置#make menuconfig,进入图形化界面,找到板级支持包的地址,arch/arm/configs/s3c2410_defconfig
.然后进入System type,选三星S3C2410****很长的那个,然后进入2440的那项,选中smdk2440
选择保存配置
.退出菜单后,make zImage,I要大写,文件存在arch、arm/boot下,然后修改该目录下的Makefile

#make disclean,如果想在执行的时候顺便把zImage删除,在根目录下的makefile的第1247行加上-type f -printf | xargs rm -f rm zImage
.把镜像烧入NAND FLADH,查看能否正常打印信息

支持NAND FLASH,
在linux-2.6.32.2/drivers/mtd/nand/nand_ids.c
以smdk2440的文件作参考/arch/arm/plat_24xx/common-smdk.c,第110行开始的结构体作为参考,在自己的march-mini2440.c中添加
添加以下代码时,要注意头文件需要相应的增加
static struct mtd_partition mini2440_default_nand_part[] = {
[0] = {
.name = "supervivi", ;这里是bootloader 所在的分区,可以放置u-boot, supervivi 等内容,对应
/dev/mtdblock0
.size = 0x00040000,
.offset = 0,
},
[1] = {
.name = "param", ;这里是supervivi 的参数区,其实也属于bootloader 的一部分,如果u-boot 比较
大,可以把此区域覆盖掉,不会影响系统启动,对应/dev/mtdblock1
.offset = 0x00040000,
.size = 0x00020000,
},
[2] = {
.name = "Kernel", ;内核所在的分区,大小为5M,足够放下大部分自己定制的巨型内核了,比如内核
使用了更大的Linux Logo 图片等,对应/dev/mtdblock2
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "root", ;文件系统分区,友善之臂主要用来存放yaffs2 文件系统内容,对应/dev/mtdblock3
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, //
},
[4] = {
.name = "nand", ;此区域代表了整片的nand flash,主要是预留使用,比如以后可以通过应用程序访
问读取/dev/mtdblock4 就能实现备份整片nand flash 了。
.offset = 0x00000000,
.size = 1024 * 1024 * 1024, //
}
};
;这里是开发板的nand flash 设置表,因为板子上只有一片,因此也就只有一个表
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 填写,大部分情况下按照以下参数填写即可
static struct s3c2410_platform_nand mini2440_nand_info = {
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets = ARRAY_SIZE(mini2440_nand_sets),
.sets = mini2440_nand_sets,
.ignore_unset_ecc = 1,

然后再把nandflash注册到系统中,
static struct platform_device *mini2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand, ;把nand flash 设备添加到开发板的设备列表结构
};

配置yffs2(可以支持大页的nandflash)
进入目录,执行./path-ker.sh.c /...路径/linux-2.6.32.2
***

网卡的支持
在linux-2.6.32.2、driver/net/dm9000.c
修改dm9000.c,增加头文件#include<dm9000.h>,然后增加网卡物理地址,网方便后面使用
/* DM9000AEP 10/100 ethernet controller */
#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)
继续填充资源
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 = IORESOURCE_MEM
},
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
}
};
/*
* * * The DM9000 has no eeprom, and it's MAC address is set by
* * * the bootloader before starting the kernel.
* * */
static struct dm9000_plat_data mini2440_dm9k_pdata = {
.flags = (DM9000_PLATF_16BITONLY | 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 设备集中添加上面做好的网卡平台设备,如下红色部分
static struct platform_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,
};
接口配置就完成了
调整位宽寄存器,增加如下代码
#if defined(CONFIG_ARCH_S3C2410)
#include <mach/regs-mem.h>
#endif
因为mini2440是通过总线扩展的dm9000,所以需要调价一些代码,也可以添加到marh-mini2440中
#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 & ~(3<<16)) | S3C2410_BWSCON_DW4_16 |
       S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
       *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif
因为没有外界EEPROM,所以不能存储网卡MAC,所以是软地址,在static int __devinit dm9000_probe(struct platform_device *pdev)函数中可以看出:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值