成功移植U-BOOT之---- DM9000网卡驱动

合集下载

Mini2440 Uboot移植

Mini2440 Uboot移植

第一部分根据uboot-2008.10,移植出能在mini2440 nor flash上运行的uboot1 修改Makefile:在uboot-2008.10顶层目录中的Makefile中,参考smdk2410_config,添加新的配置选项。

# add,flyrizmini2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x02 修改cpu/arm920t/start.S:2.1添加支持S3C2440的编译条件/* #if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410) *//*modify,flyriz*/#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) 2.2添加S3C2440寄存器的定义#else# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */# endif/*add,flyriz,for 2440,register define*/#define CLK_CTL_BASE 0x4C000000#define MDIV_405 0x7f<<12#define PSDIV_405 0x21#define UPLL_MDIV_48 0x38<<12#define UPLL_PSDIV_48 0x22#define MDIV_200 0xa1<<12#define PSDIV_200 0x31/****************************/2.3修改中断禁止代码# if defined(CONFIG_S3C2410)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, [r0]# endif/*add,flyriz*/# if defined(CONFIG_S3C2440)ldr r1, =0x7fff /* S3C2440有15个子中断[0...14] */ldr r0, =INTSUBMSKstr r1, [r0]# endif2.4 修改时钟设置/********************* FCLK:HCLK:PCLK = 1:2:4 ** default FCLK is 120 MHz ! *ldr r0, =CLKDIVNmov r1, #3str r1, [r0]#endif * CONFIG_S3C2400 || CONFIG_S3C2410 *********************//*modify,flyriz*/#if defined(CONFIG_S3C2440)/*FCLK:HCLK:PCLK=1:4:8*/ldr r0,=CLKDIVNmov r1,#5str r1,[r0]mrc p15,0,r1,c1,c0,0 /* CP15中的寄存器C1是一个控制寄存器,用于配置MMU中的一些操作 */orr r1,r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASE /* 0x4C000000 LOCKTIME:PLL lock time counter */mov r2,#UPLL_MDIV_48add r2,r2,#UPLL_PSDIV_48str r2,[r1,#0x08] /* 0x4C000008 UPLLCON=0x38<<12||0x22,output 48MHz */mov r2,#MDIV_405add r2,r2,#PSDIV_405str r2,[r1,#0x04] /* 0x4C000004 MPLLCON=0x7f<<12||0x21,output 405MHz */ #elseldr r0,=CLKDIVNmov r1,#3str r1,[r0]mrc p15,0,r1,c1,c0,0orr r1,r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASEmov r2,#MDIV_200add r2,r2,#PSDIV_200str r2,[r1,#0x04]#endif#endif /*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*//**********************************************************/3 修改cpu/arm920t/s3c24x0/interrupts.c3.1 在条件编译的宏定义里加入对s3c2440的支持:/* #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) *//*modify,flyriz*/#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)||defined(CONFIG_TRAB)/* #elif defined(CONFIG_S3C2410) *//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)3.2 在get_tbclk函数中,添加对mini2440的支持:#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)tbclk = timer_load_val * 100;#elif defined(CONFIG_SBC2410X) || \defined(CONFIG_SMDK2410) || \defined(CONFIG_MINI2440) || \defined(CONFIG_VCMA9) /*modify,flyriz,add:CONFIG_MINI2440*/tbclk = CFG_HZ; /*get_tbclk函数的作用?CFG_HZ又是什么?*/4 修改cpu/arm920t/s3c24x0/speed.c4.1 在条件编译的宏定义里加入对s3c2440的支持:/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410)|| defined (CONFIG_TRAB)*//*modify,flyriz*/#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)4.2 修改get_PLLCLK函数:m = ((r & 0xFF000) >> 12) + 8;p = ((r & 0x003F0) >> 4) + 2;s = r & 0x3;/*add,flyriz*/#if defined(CONFIG_S3C2440)if(pllreg==MPLL)return ((CONFIG_SYS_CLK_FREQ*m*2)/(p<<s)); /*S3C2440中,UPLL与MPLL的计算公式不同*/ else if(pllreg==UPLL)#endif4.3 修改get_HCLK函数:ulong get_HCLK(void){S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();/*return ((clk_power->CLKDIVN&0x2)?get_FCLK()/2:get_FCLK()); delete,flyriz*//*add,flyriz*/#if defined(CONFIG_S3C2440)if(clk_power->CLKDIVN & 0x6){if((clk_power->CLKDIVN & 0x6)==2)return (get_FCLK()/2);if((clk_power->CLKDIVN & 0x6)==6)return ((clk_power->CAMDIVN&0x100)?get_FCLK()/6:get_FCLK()/3);if((clk_power->CLKDIVN & 0x6)==4)return ((clk_power->CAMDIVN&0x200)?get_FCLK()/8:get_FCLK()/4);return (get_FCLK());}else return (get_FCLK());#elsereturn ((clk_power->CLKDIVN&0x2)?get_FCLK()/2:get_FCLK());#endif}5 修改include/asm-arm/mach-types.h,添加mini2440的机器ID(必须与内核提供的ID保持一致):#define MACH_TYPE_GENEVA 1873#define MACH_TYPE_MINI2440 1999 /*add,flyriz,mini2440机器ID,必须与内核提供的ID相同*/6 修改cpu/arm920t/s3c24x0/serial.c/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)*//*modify,flyriz*/#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)7 修改drivers/rtc/s3c24x0_rtc.c/* #elif defined(CONFIG_S3C2410) */#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) /*modify,flyriz*/8 修改include/s3c24x0.h/*#ifdef CONFIG_S3C2410*/#if defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) /*modify,flyriz*/(所有ifdef CONFIG_S3C2410全部替换)/* CLOCK & POWER MANAGEMENT (see S3C2400 manual chapter 6) *//* (see S3C2410 manual chapter 7) */typedef struct {S3C24X0_REG32 LOCKTIME;S3C24X0_REG32 MPLLCON;S3C24X0_REG32 UPLLCON;S3C24X0_REG32 CLKCON;S3C24X0_REG32 CLKSLOW;S3C24X0_REG32 CLKDIVN;/*add,flyriz*/#if defined(CONFIG_S3C2440)S3C24X0_REG32 CAMDIVN; /*增加CAMDIVN的定义*/#endif} /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;9 为开发板新建一个目录在board目录中新建一个目录mini2440,将board/smdk2410下的所有文件拷贝到board/mini2440中,然后对mini2440中的文件做修改:将smdk2410.c改为mini2440.c;将Makefile中的代码COBJS :=smdk2410.o flash.o 改为COBJS :=mini2440.o flash.o10 修改board/mini2440/mini2440.c10.1 修改PLL的配置/*****************#elif FCLK_SPEED==1 // Fout = 202.8MHz#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#endif#define USB_CLOCK 1*//*modify,flyriz*/#elif FCLK_SPEED==1#if defined(CONFIG_S3C2410)/*Fout=202.8MHz*/#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#endif#if defined(CONFIG_S3C2440)/*Fout=405MHz*/#define M_MDIV 0x7f#define M_PDIV 0x2#define M_SDIV 0x1#endif#endif#define USB_CLOCK 1/*****************/10.2 修改UPLL的配置/***************#if USB_CLOCK==0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK==1#define U_M_MDIV 0x48#define U_M_PDIV 0x3#define U_M_SDIV 0x2#endif*//*modify,flyriz*/#if USB_CLOCK==0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK==1#if defined(CONFIG_S3C2410) #define U_M_MDIV 0x48#define U_M_PDIV 0x3#endif#if defined(CONFIG_S3C2440) #define U_M_MDIV 0x38#define U_M_PDIV 0x2#endif#define U_M_SDIV 0x2#endif/*****************/10.3 修改board_init函数,以引导内核/* arch number of SMDK2410-Board *//* gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; *//*modify,flyriz*/gd->bd->bi_arch_number = MACH_TYPE_MINI2440;11 修改board/mini2440/lowlevel_init.S中REFRESH的刷新周期/* REFRESH parameter */#define REFEN 0x1 /* Refresh enable */#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh *//* #define Trp 0x0 2clk *//*modify,flyriz*/#define Trp 0x2 /* 4clk */#define Trc 0x3 /* 7clk */#define Tchr 0x2 /* 3clk *//* #define REFCNT 1113 period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) *//*modify,flyriz*/#define REFCNT 1012/**************************************/12 添加并修改配置文件为开发板添加新的配置文件,复制include/configs/smdk2410.h,另存为include/configs/mini2440.h,并对其进行修改12.1 添加s3c2440的宏定义#define CONFIG_ARM920T 1 /* This is an ARM920T Core *//* #define CONFIG_S3C2410 1 in a SAMSUNG S3C2410 SoC *//* #define CONFIG_SMDK2410 1 on a SAMSUNG SMDK2410 Board *//*modify,flyriz*/#define CONFIG_S3C2440 1#define CONFIG_MINI2440 112.2 修改命令提示符#defineCFG_LONGHELP /* undef to save memory *//* #define CFG_PROMPT "SMDK2410 # " Monitor Command Prompt *//*modify,flyriz*/#define CFG_PROMPT "Mini2440 # "一个具备基本功能的UBOOT代码修改部分已经完成。

DM9000驱动移植详解及问题点

DM9000驱动移植详解及问题点

OK6410、2.6.36内核移植,dm9000 驱动移植,详细!分类:嵌入式学习Linux学习2012-04-27 00:54 3004人阅读评论(7) 收藏举报interfaceccompressionresourcesstructtable还是先来吐槽:本来我是在上一个星期的周末已经把Linux2.6.34.11 的驱动已经成功的移植到,OK6410 的开发板上的,并且能够启动主机上的NFS 根文件系统,可是我在周一的时候,开始学习LCD 的驱动程序,在修改内核文件的时候,有几处错误修改,将原来自己做的2.6.34.11 的内核源码搞的乱七八糟的,在这里还是自己在修改内核的时候没有提注重注释,并且没有记录下来自己的操作步骤,以至于我没办法,恢复2.6.34 的内核,所以也就只能重新先开始最基础的内核移植了。

这次我选择的是2.6.36.2 的内核,谁知到一开始移植就出现一大堆问题。

在这里我不得不说,飞凌开发人员对内核修改的代码,管理真的是太扯了,自己在注销任何一个设备是没有一点点注释,就把这个设备原有的线性地址分配给其它设备了,让我让我们这些菜鸟干看着一大堆的报错信息顶个什么用,真的是伤不起。

好了不乱扯了,现在开始记录。

我的开发环境是:VMware Ubuntu 10.10 。

OK6410 A版256M+2G 的开发板。

主机系统:XP。

Uboot:飞凌提供的Uboot。

参考内核:飞凌提供的Forlinx 的2.6.36.2 内核操作步骤以下./ 均代表你的内核根目录1、修改./Makefile191 ARCH ?=arm // 指定cpu类型,arm后面不要有空格,要不然编译是会提醒ARCH 不能为一个目录192 CROSS_COMPILE ?=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- // 指定交叉编译器的路径,按照你自己的进行指定路径2、先来说说nand flash 的驱动涉及到的文件:MTD 通用nand flash 驱动程序位置:./drivers/mtd/nand/.nand_base.cNAND Flash 的platform 设备信息: ./drivers/mtd/nand/s3c_nand.c有了上面的依赖驱动依赖程序、接下来修改./arch/arm/mach-s3c64xx/mach-smdk6410.c 1) nandflash 驱动,修改方法加载头文件[cpp]view plaincopyprint?1.#include <linux/mtd/mtd.h>2.#include <linux/mtd/partitions.h>3.#include <plat/nand.h> //这些头文件放在./arch/arm/plat-samsung/include/ 下面添加nand 结构体[cpp]view plaincopyprint?1.// add by acanoe first2.extern void s3c64xx_reserve_bootmem(void); //add by acanoe3.4.5.struct mtd_partition ok6410_nand_part[] = {6. {7. .name = "Bootloader",8. .offset = 0,9. .size = (1 * SZ_1M),10. .mask_flags = MTD_CAP_NANDFLASH,11. },12. {13. .name = "Kernel",14. .offset = (1 * SZ_1M),15. .size = (5*SZ_1M) ,16. .mask_flags = MTD_CAP_NANDFLASH,17. },18. {19. .name = "User",20. .offset = (6 * SZ_1M),21. .size = (120*SZ_1M) ,22. },23. {24. .name = "File System",25. .offset = MTDPART_OFS_APPEND,26. .size = MTDPART_SIZ_FULL,27. }28.};29.30.31.static struct s3c2410_nand_set ok6410_nand_sets[] = {32. [0] = {33. .name = "nand",34. .nr_chips = 1,35. .nr_partitions = ARRAY_SIZE(ok6410_nand_part),36. .partitions = ok6410_nand_part,37. },38.};39.40.41.static struct s3c2410_platform_nand ok6410_nand_info = {42. .tacls = 25,43. .twrph0 = 55,44. .twrph1 = 40,45. .nr_sets = ARRAY_SIZE(ok6410_nand_sets),46. .sets = ok6410_nand_sets,47.};48.//add by acanoe first修改 smdk6410_devices[] __initdata = {对照这个结构体将那些进行修改,注意 by acanoe 的语句为修改重点。

UBIFS文件系统的移植

UBIFS文件系统的移植

UBI文件系统的移植作者:piaozhiye86@首次做UBIFS的移植,不足之处欢迎批评指正。

2010-7-15自从linux2.6.27以后的内核版本都支持UBI文件系统了,新版本的uboot已经支持UBIFS了。

软件平台VMwareFedora-10使用源码:linux-2.6.30.4.tar.bz2u-boot-2010.06-rc1.tar.bz2硬件环境mini2440—64M NAND关于uboot的移植可以参考《嵌入式Linux之我行》中uboot的移植,那里写得比较详细。

我也是参考了其中的文章。

1、uboot的UBI的移植关于uboot的UBI的移植几乎没有说明介绍,移植首先要保证你的flash驱动能够跑起来,我是在nand flash 上跑的UBI。

刚开始的时候我也没有什么头绪,只能够从uboot的readme开始查找一些蛛丝马迹。

- MTD Support (mtdparts command, UBI support)CONFIG_MTD_DEVICEAdds the MTD device infrastructure from the Linux kernel.Needed for mtdparts command support.CONFIG_MTD_PARTITIONSAdds the MTD partitioning infrastructure from the Linuxkernel. Needed for UBI support.因此呢,要UBI支持首先得要MTD支持,因此在配置文件中要添加以上两项的定义。

要移植UBI还要添加:#define CONFIG_CMD_UBIFS#define CONFIG_CMD_UBI总的关于UBI的部分是以下几个宏/****MTD Support (mtdparts command, UBI support)****/#if 1#define CONFIG_MTD_DEVICE 1#define CONFIG_MTD_PARTITIONS 1#define CONFIG_CMD_MTDPARTS#define CONFIG_CMD_UBIFS#define CONFIG_CMD_UBI#define CONFIG_LZO 1#define CONFIG_RBTREE 1#endif同时呢要给NAND建立个默认的分区。

Linux内核配置移植及编译实验

Linux内核配置移植及编译实验

return platform_driver_register(&dm9k_driver); } 7.添加 YAFFS 文件系统支持 将我们提供的 YAFFS 的源代码 yaffs2.tar.gz 拷贝到 linux-2.6.24.4 的同 级目录下,解压该源码包,获得 YAFFS 源码: # pwd /root/2410-s # cp /mnt/hgfs/e/yaffs2.tar.gz ./ # tar zxvf yaffs2.tar.gz 然后进入 yaffs2 目录,运行./patch-ker.sh 给内核打上补丁: # cd yaffs2 # ./patch-ker.sh c ../linux-2.6.24.4/ 这样打好补丁以后,再做正确的配置,内核就可以支持 YAFFS 文件系统了。 8.配置和编译内核 到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译, 内核才能正常使用。 在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面: # make menuconfig (1)选择硬件系统 做如下选择: System Type --->
S3C2410 Machines ---> [*] SMDK2410/A9M2410 [ ] IPAQ H1940 [ ] Acer N30 [ ] Simtec Electronics BAST (EB2410ITX) [ ] NexVision OTOM Board [ ] AML M5900 Series [ ] Thorcom VR1000
.size = SZ_4M, }, [3] = {
.name = "User Space", .offset = 0x680000, .size = 0x1980000, }, }; 这样就把我们的 64M 的 NAND Flash 分为四个区: 第一个区从 0x00000000 到 0x00080000,大小为 0.5M 第二个区从 0x00080000 到 0x00280000,大小为 2M 第三个区从 0x00280000 到 0x00680000,大小为 4M 第四个区从 0x00680000 到 0x02000000,大小为 25.5M 5.添加 LCD 支持 我们的开发平台上配置有 640*480 的液晶屏,我们来为它加上驱动支持。 需要在 arch/arm/mach-s3c2410/mach-smdk2410.c 中添加一些内容。 # vi arch/arm/mach-s3c2410/mach-smdk2410.c 首先要包含我们的 LCD 使用的数据结构的头文件,增加如下内容: #include <asm-arm/arch-s3c2410/fb.h> #include <linux/platform_device.h> 然后添加如下内容: static struct s3c2410fb_display up2410_fb[] __initdata = { { .lcdcon5 = (1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0), .type = (3<<5), .width = 640, .height = 480, .pixclock = 39721,

嵌入式系统设计实验告--BootLoader移植实验

嵌入式系统设计实验告--BootLoader移植实验

合肥学院嵌入式系统设计实验报告(20 13 - 20 14 第 2 学期)专业:实验项目:BootLoader移植实验实验时间:2014年5月19日实验成员:____________________________________________________________________指导老师:电子信息与电气工程系2014 年 4 月制实验三BootLoader 移植实验一、实验目的1、熟悉 Bootloader 工作原理。

2、了解 U-Boot 的代码结构。

3、掌握 U-Boot 移植过程。

二、实验内容本实验熟悉 Bootloader 工作原理,了解 U-Boot 源码结构,基于 S3C2440 处理器,完成 U-Boot 移植,并在目标开发板上测试通过。

三、实验设备硬件: 1、 pc 机2、 FriendlyARM开发套件即MIRCO2440 核心板软件: 1、虚拟机( VMware )2、U-Boot 源码( u-boot-2011.03.tar )四、实验过程1、 Micro2440配置在mini2440/micro2440上的移植准备工作,我们仍然将开发板文件建立在board/samsung 下,2、配置时出现错误,字体要修改,复制粘贴的时候出现的错误,有的地方有中文,去掉就行了。

3、编译完成失败,只有上网查找错误,最后解决了错误。

11124、编译完成后将u-boot.bin下载到SDRAM的 0x33f80000地址处, u-boot已经能在RAM中运行。

二、支持DM90001、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。

三、支持内核启动1、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。

四、支持Nand Flash1、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。

五、实验小结本实验需要熟悉Bootloader 工作原理,了解U-Boot 源码结构,基于S3C2440 处理器,完成 U-Boot 移植,并在目标开发板上测试通过,首先可以看到实验指导书上的介绍,了解U-Boot 的移植。

Linux2.6内核移植系列教程

Linux2.6内核移植系列教程

Linux2.6内核移植系列教程第一:Linux 2.6内核在S3C2440平台上移植此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:/1.解压linux-2.6.34.tar.bz2源码包#tar jxvf linux-2.6.34.tar.bz22.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH ? =armCROSS_COMPILE?=/usr/local/arm/4.3.2/bin/arm-linux-注意:交叉编译器的环境变量也需要改为4.3.2#export PATH=/usr/local/arm/4.3.2/bin/:$PATH其中ARCH变量用来决定:配置、编译时读取Linux源码arch目录下哪个体系结构的文件PATH 用来决定交叉编译器版本3.修改机器类型ID号Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息:MACHINE_START(S3C2440, "SMDK2440")/* Maintainer: Ben Dooks <ben@> */.phys_io= S3C2410_PA_UART,.io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,.boot_params= S3C2410_SDRAM_PA + 0x100,.init_irq= s3c24xx_init_irq,.map_io= smdk2440_map_io,.init_machine= smdk2440_machine_init,.timer= &s3c24xx_timer,MACHINE_ENDMACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字,"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件:gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。

Uboot_for_mini6410_移植步骤详解

Uboot_for_mini6410_移植步骤详解

这是u-boot-2010.09 针对友善之臂MINI6410移植的最基础版本,只包含了就基本的系统引导,NAND读写,DM9000网卡等等。

但是这个足够开发的方便使用。

今后会陆续添加原先我为mini2440添加的所有功能。

但是此次移植并非我的功劳,首先基本的移植是由Alex Ling <kasimling at >完成的,你可以在这里看到他提交的补丁,但是编译后无法使用,可能是因为host系统不同,对脚本的解析不同,使得spl部分的生成出现问题,只需修改一下nand_spl目录下目标板目录的中config.mk中的PAD_TO := $(shell expr $$[$(TEXT_BASE) + 4096])即可。

DM9000的驱动没有太大的问题(修改了一点可能出现问题的地方,感谢肖工指教),但是原本的u-boot并没有调整所有SROM控制器的配置(其中包括连接DM9000所使用的bank1的总线),我使用了友善带的u-boot的参数配置了一下就好了。

一:/batch.viewlink.php?itemid=1694ftp://ftp.denx.de/pub/u-boot/去这2个网站随便下载都可以下载得到最新或者你想要的u-boot。

现在我将下载u-boot-2010-09,这个也就是最新的版本啦。

下载后把它解压,然后得到u-boot-2010-09的文件夹,然后进去,并且做下面几件事情:1:进入arch这个文件夹,把出arm外的前部文件夹删掉2:进入board这个文件夹,把除samsung外前部文件夹删掉3:进入include/configs,把除smdk6400.h外的所有文件删除。

4: 把顶层目录下有一个叫onenand_ipl的文件夹删除掉,因为没有用到。

5:进入nand_spl/board,把除samsung外全部文件删除掉。

6:再进入arch/arm/cpu文件夹,把除arm1176外其他文件夹删除掉。

UBOOT-1.1.6一些文件功能分析_prodigal

UBOOT-1.1.6一些文件功能分析_prodigal

141745169S3C2440裸奔讨论群Prodigal UBOOT学习笔记之部分:这是今天下午分析的文件,贴出来希望对大家帮助,分析了文件后对移植理解又更深了一步。

UBOOT移植体会:看下笔记记录时间,UBOOT这环节是从3月10号开始的,其中包括了几个学习环节:UBOOT 启动分析,UBOOT移植,UBOOT常见文件分析。

在移植中感觉最大的收获:倒不是成功的移植几个程序(说实话,在移植过程中,思维一直都是别人的,我们大都做的只是代码搬运,这样学着你是不是觉得很迷茫?),而是对UBOOT文件系统更加熟悉,更加清晰,也学会了一些错误分析的方法。

在UBOOT移植过程中:我不断问自己:要是自己移植的并不是S3C2440,而是一个我不熟悉的开发板,那我又应该怎么修改?也许我不喜欢被动的感觉吧。

01.include/configs/smdk2410.hFUNCTION:一些预定义配置①上层配置信息②Fin=12MHz③MMU IRQ/FIQ④malloc池大小、全局变量池大小⑤硬件设备:网卡我的网卡是DM9000⑥选择串行控制台配置⑦实时时钟RTC⑧波特率设置以及串口overwrite允许⑨预定义命令CONFIG_COMMANDS⑩网络配置*/⑪一些杂乱的配置信息:主要是UBOOT控制台显示设置⑫用PWM定时器4计时10ms(15625),所以1s就应该设置为15625*100⑬可设置的波特率:一般使用115200⑭堆栈大小设置⑮物理内存空间的设置:SDRAM,FLASH⑯FLASH与环境组织⑰擦除与写FLASH的最大时间:02.board/smdk2410/lowlevel_init.SFUNCTION:初始化存储控制器03.board/smdk2410/smdk2410.cFUNCTION:初板子的初始化配置①配置Fout(MPLL)②配置usb输出频率(UPLL)③平台依赖的相关部件的初始化3.1设置系统时钟3.2设置I/O端口3.3读取板子ID3.4UBOOT参数存放位置3.5使能icache与dcache3.5检测内存映射04.include/s3c2410.hFUNCTION:①UART与SPI选用的通道②ECC参数设置③UART的选择④S3C2410芯片上功能部件寄存器的起始地址⑤S3C2410芯片上功能部件寄存器的起始地址的获取函数⑥ISR相关的地址定义⑥这什么玩意??PENDING BIT⑦这什么玩意??清除Pending,这下懂了,就是清除中断挂起寄存器05.include/s3c24x0.hFUNCTION:部件相关的结构体定义06.include/asm-arm/global_data.hFUNCTION:lobal data used for startup functions①定义gd_t(struct global_data)类型的结构体②全局数据标志③宏定义DECLARE_GLOBAL_DATA_PTR07.include/asm-arm/u-boot.hFUNCTION:boot information for Linux kernel 08.include/common.hFUNCTION:目前用到的是:对函数的声明还有几个文件,但目前暂时不想分析只贴这个文件:board/smdk2410/smdk2410.c(并不是说其他的怎么样,而是因为这个文件让我学会了很多东西)/**(C)Copyright2002*Sysgo Real-Time Solutions,GmbH<>*Marius Groeger<mgroeger@sysgo.de>**(C)Copyright2002*David Mueller,ELSOFT AG,<d.mueller@elsoft.ch>**See file CREDITS for list of people who contributed to this*文件CREDITS列出了所有对此做出贡献的人*project.**This program is free software;you can redistribute it and/or一*modify it under the terms of the GNU General Public License as*published by the Free Software Foundation;either version2of些*the License,or(at your option)any later version.**This program is distributed in the hope that it will be useful,*but WITHOUT ANY WARRANTY;without even the implied warranty of说*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the*GNU General Public License for more details.**You should have received a copy of the GNU General Public License明*along with this program;if not,write to the Free Software*Foundation,Inc.,59Temple Place,Suite330,Boston,*MA02111-1307USA*/FUNCTION:初板子的初始化配置①配置Fout(MPLL)②配置usb输出频率(UPLL)③平台依赖的相关部件的初始化3.1设置系统时钟3.2设置I/O端口3.3读取板子ID3.4UBOOT参数存放位置3.5使能icache与dcache3.5检测内存映射/*下面头文件在include/目录下*/#include<common.h>#include<s3c2410.h>DECLARE_GLOBAL_DATA_PTR;/*必须增加这一行才能使用gd变量*//*①配置Fout(MPLL)*/#define FCLK_SPEED1#if FCLK_SPEED==0/*Fout=203MHz,Fin=12MHz for Audio*/#define M_MDIV0xC3#define M_PDIV0x4#define M_SDIV0x1#elif FCLK_SPEED==1/*Fout=202.8MHz*/#define M_MDIV0xA1#define M_PDIV0x3#define M_SDIV0x1#endif/*②配置usb输出频率(UPLL)*/#define USB_CLOCK1#if USB_CLOCK==0#define U_M_MDIV0xA1#define U_M_PDIV0x3#define U_M_SDIV0x1#elif USB_CLOCK==1#define U_M_MDIV0x48#define U_M_PDIV0x3#define U_M_SDIV0x2#endif/**delay函数加上“static inline”是有原因的,*这样可以使得编译*.c时,delay嵌入其他函数中,编译结果中只有其他函数一个函数。

u-boot移植4--支持DM9000

u-boot移植4--支持DM9000

U-boot移植5--支持DM9000开发板的原理图中得知:第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中)(上面的宏CONFIG_NET_MULTI,等会要实现)。

1、在eth_initialize(文件中有两个,代码较长的那个)的#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)miiphy_init();#endif后面添加上下面的代码if (board_eth_init(bis) < 0)cpu_eth_init(bis);并在本文件前面增加如下代码:static int __def_eth_init(bd_t *bis){return -1;}int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));2、在mao2440.c中添加上面函数的实现#include <net.h>extern int dm9000_initialize(bd_t * bd);#ifdef CONFIG_DRIVER_DM9000int board_eth_init(bd_t *bis){return dm9000_initialize(bis);}#endif3、在include/configs/mao2440.h中注释CS8900的代码,如下:(62行)#if 0#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */#define CS8900_BASE 0x19000300#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */#end if并添加DM9000的宏, 由上图知DM9000在BANK4上,所以定义为0x20000300如下:#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_BASE 0x20000300#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE+4)#define CONFIG_DM9000_USE_16BIT 1#define CONFIG_NET_MULTI 14、网上说要修改dm9000x.c的eth_init(bd_t * bd)的内容,此步我的板不用eth_init(bd_t * bd){.............../* Set Node address *//*for (i = 0; i < 6; i++)((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);*/char *tmp = getenv ("ethaddr");char *end;for (i=0; i<6; i++) {bd->bi_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;if (tmp)tmp = (*end) ? end+1 : end;}……………….#if 0i = 0;…………#endifreturn 0;}红色的字符是要做的修改:功能是屏蔽原有获取MAC地址的语句,替换成从U-Boot的参数区读取数据并存到bd->bi_enetaddr[i]中功能是屏蔽无用的语句。

u-boot-2015.04在tq2440上的移植(使用spl引导u-boot)

u-boot-2015.04在tq2440上的移植(使用spl引导u-boot)

u-boot-2015.04在tq2440上的移植(使⽤spl引导u-boot)使⽤⽅法:1、编译 make tq2440_defconfig make2、然后会在u-boot根⽬录下⽣成u-boot.bin,在spl⽬录下会⽣成u-boot-spl.bin,⽬前的分区是:u-boot-spl.bin(1M)u-boot.bin(1M)kernel(3M)rootfs(剩余)⾃⼰可以改动,在arch/arm/lib/crt0.S中: #if defined(CONFIG_SPL_BUILD)/* Read u-boot from Nandflash to SDRAM address $CONFIG_SYS_TEXT_BASE */ldr r0, =CONFIG_UBOOT_MTD_ADDR /*u-boot镜像在NandFlash中存储地址*/ldr r1, =CONFIG_SYS_TEXT_BASE /*u-boot在内存中的加载地址*/ldr r2, =CONFIG_UBOOT_LENGTH /*u-boot镜像的⼤⼩*/bl copy_code_to_sdramldr pc, =CONFIG_SYS_TEXT_BASE #elsebl board_init_f #endif3、⽬前⽀持NandFlash和DM9000。

4、为什么要⽤spl来引导u-boot? 对于tq2440,采⽤的是S3C2440,当从NandFlash启动时,上电时S3C2440内部固化的程序⾃动把NandFlash的前4KB 程序拷贝到⽚内SRAM,然后执⾏IRAM中的程序,同时要保证这4KB中的程序是位置⽆关码,在这4KB程序完成了内存的初始化,栈的设置,NandFlash的初始化,将u-boot镜像从NandFlash中拷贝到内存中,将PC跳转到内存中执⾏。

随着u-boot的更新,在u-boot的前4K已经⽆法完成上⾯这些事,在前4KB会执⾏位置相关码,导致u-boot⽆法正常运⾏。

u-boot制作编译过程ok

u-boot制作编译过程ok

2.1.5 UBOOT的制作过程1.第一步:修改makefile,目的告诉makefile导入的工程名是什么。

1)在/1niuedu/u-boot-1.3.4的Makefile的2494行进行COPY后进行修改,范例如下:将smdk2410_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 复制并修改为:edu2440_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm920t edu2440 NULL s3c24x02)交叉编译143 144修改为(很多u-boot为默认,一般不修改,如不同需要修改)ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux-说明:在顶层Makefile(u-boot文件中)中为开发板添加新的配置选项,使用已有的配置项目为例复制修改如下代码:Smdk2410_config:unconfig(2497行)(告诉makefile导入的工程名是怎么设置的) @./mkconfig$(@:_config=)arm arm 920t smdk2410 NULL s3c24x0 Arm:CPU架构Arm920t:CPU类型,对应cpu/arm920t目录xyd2440:开发板型号,对应board/xyd2440NULL:开发者s3c2440:片上系统(SOC)2.第二步:配置开发板选项,修改board中相应开发板选项1)在board目录中将smdk2410复制,然后修改名字为edu2440。

2)在board/edu2440目录下将smdk2410.c修改为edu2440.c(可能运行不了,那么再做如下修改)将E:\信盈达常用资料库\嵌入式配套资料\mini2440-20100717光盘资料\linux\bootloader\u-boot-1.1.6\board\open24x0里面的:boot_init.c,open24x0.c两个文件copy到board-edu2440文件下面。

U-BOOT_DM9000驱动完全注释

U-BOOT_DM9000驱动完全注释

int eth_init(bd_t * bd);
//DM9000 网卡初始化
int eth_send(volatile void *, int);
//将来自上层的数据包发送到媒介上
int eth_rx(void);
//接收数据包并且发送到上层去
void eth_halt(void);
//关闭网卡
static int dm9000_probe(void);
{
u16 phy_reg4 = 0x01e1, phy_reg0 = 0x1000;
if (!(media_mode & DM9000_AUTO)) {
switch (media_mode) { case DM9000_10MHD:
//10M 半双工
phy_reg4 = 0x21;
//设置双工、半双工
return -1;
}
}
//*======================================================
==========
//函数名称:s e t_P HY_mod e
//函数功能:设置 PHY 芯片的操作模式 。若设置的是自动选择,则直接配置,若不是则可以选择
//
/* #define CONFIG_DM9000_DEBUG */ #define DM9000_DBG(fmt,args...) //*====================================================== ========== //DM9000 芯片的 PHY 层模式 //*====================================================== ========== enum DM9000_PHY_mode { DM9000_10MHD = 0, DM9000_100MHD =

Retry count exceeded; starting again

Retry count exceeded; starting again

关于“Retry count exceeded; starting again”今天在u-boot对DM9000X网卡的支持的移植。

最后通过tftp下载时候,遇到如下问题:tf[u-boot@MINI2440]# tp 0x30000000 root_qtopia-128M.imgFilename 'root_qtopia-128M.img'.Load address: 0x30000000Loading: T ##########T T#####################################################T##T T#T T T T ######Retry count exceeded; starting againdm9000 i/o: 0x20000300, id: 0x90000a46DM9000: running in 16 bit modeMAC: 12:34:56:78:9a:bcoperating at 100M full duplex modeUsing dm9000 deviceTFTP from server 10.1.0.128; our IP address is 10.1.0.129Filename 'root_qtopia-128M.img'.Load address: 0x30000000Loading: T ###T ###T T ########一直无休止循环,经网上搜索得知Uboot 端 tftp 程序传过来的Timeout参数不符合服务器端定义引起的,Retry count exceeded; starting again解决方法:tftp客户端传过来的timeout是7810,而服务器端定义的范围在1-255秒之间,不是服务器的问题,而是 uboot中tftp参数设置的问题,参见TFTPUnsupported option(s) requested 问题详细分析及解决。

u-boot移植详细文档

u-boot移植详细文档

u‐boot移植详细文档作者:Tekkaman Ninja作者博客:整理:Coolbor Xie一、Boot Loader的概念和功能1、嵌入式Linux软件结构与分布在一般情况下嵌入式Linux系统中的软件主要分为以下及部分:(1)引导加载程序:其中包括内部ROM中的固化启动代码和Boot Loader两部分。

而这个内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导Boot Loader。

有的芯片比较复杂,比如Omap3,他在flash中没有代码的时候有许多启动方式:USB、UART或以太网等等。

而S3C24x0则很简单,只有Norboot和Nandboot。

(2)Linux kernel 和drivers。

(3)文件系统。

包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4、UBI、CRAMFS等等)。

它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。

(4)应用程序。

用户自定义的应用程序,存放于文件系统之中。

在Flash 存储器中,他们的一般分布如下:但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader参数区,等等。

2、在嵌入式Linux中为什么要有BootLoader在linux内核的启动运行除了内核映像必须在主存的适当位置,CPU还必须具备一定的条件:1. CPU 寄存器的设置: R0=0;R1=Machine ID(即Machine Type Number,定义在linux/arch/arm/tools/mach‐types); R2=内核启动参数在 RAM 中起始基地址;2. CPU 模式: 必须禁止中断(IRQs和FIQs); CPU 必须 SVC 模式;3. Cache 和 MMU 的设置: MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭;但是在CPU刚上电启动的时候,一般连内存控制器都没有配置过,根本无法在内存中运行程序,更不可能处在Linux内核的启动环境中。

DM9000 网口驱动器 调试说明

DM9000 网口驱动器 调试说明

10M/100M DM9000模块测试方法1.网络模块与红牛STM32连接安装DM9000模块与红牛板连接时,只要保证在红牛开发板液晶模块接口的排针位置,起与DM9000的VCC3.3V和GND相对应即可,关于DM9000模块的接口定义如下图:硬件连接如下图:2.电脑本地连接属性配置如果电脑只有一张网卡,那么直接用一根交叉的双绞线与电脑连接即可(注意网线必须是交叉的,即两端的水晶头收发的交叉的),然后在网上邻居中选择查看网络连接,出现的本地连接,右键选择属性下图:选择Internet协议(TCP/IP),双击进入配置本地连接的IP,如下图:如上图,本地连接的IP地址配置为192.168.2.10,点击子网掩码它自动生成,配置这个地址只要注意前面的192.168.2固定即可,后面数字取2-255都可以,因为STM32端得IP地址是192.168.2.30,两个IP地址要在同一个网段。

如果电脑是笔记本,那么有线网卡的配置和上面一样。

如果你是台式机,并有两张网卡,那么可以一张网卡上外网,一张网卡做实验连接STM32开发板,我的电脑就是两种网卡,关于双网卡的使用,配置稍微繁琐一点,如果有需要请联系我,我再教大家配置。

3.Putty的安装Putty的安装是为了STM32的RT Thread使用的,它通过串口与开发板连接,测试列程使用的是串口1,波特率115200。

打开Putty后,配置如下图:COM1是我电脑使用的串口号,这个需要根据大家各自的电脑串口号进行修改。

有关详细Putty和RT Thread finsh的入门使用方法,请见我发的帖子/bbs/bbs_content.jsp?bbs_sn=4593755&bbs_page_ no=1&search_mode=3&search_text=zidong404&bbs_id=9999。

如果硬件连接好以后,可以通过Putty看到刚开机时输出的DM9000ID 号,并提示Lwip 初始化成功,如果没有看到DM9000的ID号那么请仔细检查模块是否安装正确。

Linux内核移植步骤_添加DM9000网卡驱动(设备树)

Linux内核移植步骤_添加DM9000网卡驱动(设备树)

Linux内核移植步骤2015年05月13日星期三上午 11:05往设备树中添加网卡驱动:1、选平台,指定交叉编译工具链:(1)、在Makefile中指定:源码顶层目录下MakefileARCH ?= $(SUBARCH)CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)改为:ARCH ?= armCROSS_COMPILE ?=arm-linux-(2)、编译时指定:# make ARCH=arm CROSS_COMPILE=/opt/arm-linux-gcc-4.6.4/bin/arm-linux-2、导出缺省配置:(1)、直接把缺省配置文件改成”.config“:把“源码/arch/arm/configs”目录下的“xxxx_defconfig“(例如:”exynos_defconfig“)配置文件拷贝到源码顶层目录下,并改名为”.config“。

(2)、使用make生成缺省配置:# make exynos_defconfig#执行该命令后系统会在源码顶层目录下自动生成”.config“文件:# configuration written to .config3、往设备树文件中添加dm9000网卡驱动:(1)、参考与自己板子最接近的demo板的设备树文件生成自己的设备树文件(直接拷贝修改)。

设备树文件在”源码目录/arch/arm/boot/dts/exynos4412-fs4412.dts“(2)、在设备树文件中添加网卡设备驱动信息(参考网卡厂商提供的范例代码):示例代码在”Documentation/devicetree/bindings/net/davicom-dm9000.txt“,如下:Davicom DM9000 Fast Ethernet controllerRequired properties:- compatible = "davicom,dm9000";- reg : physical addresses and sizes of registers, must contain 2 entries:first entry : address register,second entry : data register.- interrupt-parent : interrupt controller to which the device is connected- interrupts : interrupt specifier specific to interrupt controllerOptional properties:- davicom,no-eeprom : Configuration EEPROM is not available- davicom,ext-phy : Use external PHYExample:ethernet@18000000 {compatible = "davicom,dm9000";reg = <0x18000000 0x2 0x18000004 0x2>;interrupt-parent = <&gpn>;interrupts = <7 4>;local-mac-address = [00 00 de ad be ef];davicom,no-eeprom;};修改并添加:ethernet@05000000 {compatible = "davicom,dm9000";reg = <0x05000000 0x2 0x05000004 0x2>;/*0x05000000为4412处理器的srom片选地址,详见手册*/interrupt-parent = <&gpx0>;/*继承父节点*/interrupts = <6 4>;/*gpx0节点中断中的第6个,4是标志*/local-mac-address = [00 00 de ad be ef];/*网卡地址*/davicom,no-eeprom;pinctrl@11000000 {...gpx0: gpx0 {gpio-controller;#gpio-cells = <2>;interrupt-controller;interrupt-parent = <&gic>;interrupts = <0 16 0>, <0 17 0>, <0 18 0>, <0 19 0>,/*中断<类型中断号中断标志>*/<0 20 0>, <0 21 0>, <0 22 0>, <0 23 0>;#interrupt-cells = <2>;};...}4、修改设备树的Makefile文件:设备树的Makefile文件在”xxx/linux-3.19.1/arch/arm/boot/dts“目录下。

韦东山linux第二期驱动总结

韦东山linux第二期驱动总结

自己编写bootloaderbootloader从flash上把bootloader读取内存(包括有flash的读写、初始化内存SDRAM、同时也会初始化时钟,关闭看门口,启动则就是地址跳转,设置参数)最简单的bootloader1.关看门狗,设置时钟、设置SDRAM、设置NAND FLASH,2.把内核从NAND FLASH(开发板配置的nor flash比较小,没法写入内核)3.设置要传给内核的参数4.跳转执行U-boot制作从start.s文件开始分析。

下载下来的u-boot只有s3c2410,所以需要自己修改1.把board(单板)下面的2410拷贝成2440.2.拷贝配置文件,在include-configs把smdk2410_config.h拷贝成smdk2440_config.h3.如果此时make smdk2440_config,会提示没有规则的错误,需要修改其他文件4.搜索带smdk2410内容的文件grep“smdk2410”*-nR---可以看到boads.cfg中有相关内容,模仿2410来写。

5.修改过后,就可以make了。

编译通过后,进行调试,看什么地方出错。

1.在sourceinsight中添加新添加的内容。

2.分析错误,根据启动流程一步一步的进行。

3.start.s里面一些初始化代码修改,用之前裸机写的代码来替换部分初始化。

4.串口乱码,发现在get_HCLK里面没有定义config_s3c2440U-BOOT移植1.在http://www.denx.de/wiki/U-Boot/SourceCode中下载最新u-boot2.放入服务器/work/system目录下。

3.解压u-boot。

4.同时也在window下解压出来,建立sourceinsiged工程。

5.sourceinsiged中先把所有加入,然后把board中只保留summary的2410,Arch目录下只保留Arch/arm/cpu/arm920t(因为2440用的arm920t)6.在根目录下执行make smdk2410_config(配置)7.编译,执行make(全局编译)8.编译不能通过,有可能是编译器版本比较低的缘故。

uboot内核移植和裁剪详细步骤

uboot内核移植和裁剪详细步骤

uboot内核移植和裁剪详细步骤-U-boot内核移植步骤:Linux 3.3.5系统移植1. 将arch/arm/mach-s3c6410/下的,mach-smdk6410.c cp为mach-my6410.c;2. 打开arch/arm/mach-s3c6410/下的Kconfig,仿照MACH_SMDK6410做一个菜单项:config MACH_MY6410bool "MY6410"select CPU_S3C6410select SAMSUNG_DEV_ADCselect S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C_DEV_I2C1select SAMSUNG_DEV_IDEselect S3C_DEV_FBselect S3C_DEV_RTCselect SAMSUNG_DEV_TSselect S3C_DEV_USB_HOSTselect S3C_DEV_USB_HSOTGselect S3C_DEV_WDTselect SAMSUNG_DEV_BACKLIGHTselect SAMSUNG_DEV_KEYPADselect SAMSUNG_DEV_PWMselect HAVE_S3C2410_WATCHDOG if WATCHDOGselect S3C64XX_SETUP_SDHCIselect S3C64XX_SETUP_I2C1select S3C64XX_SETUP_IDEselect S3C64XX_SETUP_FB_24BPPselect S3C64XX_SETUP_KEYPADhelpMachine support for the Pillar MY64103. 打开arch/arm/tools/mach-types文件,这里面存的是机器ID必须要和uboot里面的ID保持一致,将其283行复制添加在后面并修改为: smdk6410MACH_SMDK6410 SMDK6410 1626 xx6410 MACH_XX6410 XX6410 1626 这个机器ID和UBOOT里的机器ID相同时才能启动内核;1. 修改BSP文件mach-my6410.c,内容如下:将mach-mach-my6410.c文件中的所有smdk6410改成my6410(不要改大写SMDK6410的)MACHINE_START(MY6410, "MY6410")//这个要和Kconfig里的MACH-MY6410匹配 2. 在当前目录的Makefile最后一行加上 obj-$(CONFIG_MACH_MY6410) += mach-my6410.o3. 修改顶层的Makefile:ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- 4. 复制arch/arm/configs/下的s3c6400-defconfig文件,然后将其保存为.config,配置内核支持EABI,再选中XX6410 board这一项,保存退出;5. 执行make menuconfig对内核进行配置:执行make编译执行make zImage生成zImage将uboot根目录下的mkimage拷贝到/user/bin目录下执行make uImage生成uImage通过以上几步linux内核移植完了,剩下就移植驱动了。

DM9000网卡芯片详细调试过程

DM9000网卡芯片详细调试过程

DM9000网卡芯片详细调试过程1.硬件接入:将DM9000芯片与主控芯片相连接。

DM9000芯片需要与主控芯片通过SPI、I2C或8位数据总线相连接。

同时,还需要给DM9000芯片供电。

2.芯片驱动:需要编写相关的DM9000驱动程序,确保主控芯片可以与DM9000芯片进行通信。

驱动程序一般会提供一些API函数,可以通过调用这些函数来操作DM9000芯片。

3.软件配置:使用DM9000驱动程序进行软件配置,以设置一些基本参数,例如MAC地址、IP地址、子网掩码等。

这些参数在网络通信中是必须的。

4.连接网络:确保主控芯片与DM9000芯片所在的嵌入式系统已经连接到网络中,可以通过路由器进行连接。

5.测试通信:编写通信测试程序,利用DM9000芯片进行网络通信测试。

可以测试网卡是否可以正常接收和发送数据包。

通过打印调试信息,可以了解网络通信的过程和结果。

以上是DM9000网卡芯片的详细调试过程的基本步骤。

下面将更加详细地介绍每个步骤:1.硬件接入:根据DM9000芯片的硬件接口,将其与主控芯片连接。

DM9000芯片可以通过SPI、I2C或8位数据总线进行连接,具体的连接方式需根据系统需求进行选择。

同时,还需要正确连接DM9000芯片的供电引脚,确保芯片正常工作。

2.芯片驱动:编写DM9000驱动程序,确保主控芯片可以与DM9000芯片进行通信。

驱动程序一般需要提供一些API函数,例如初始化函数、发送数据函数和接收数据函数等。

这些API函数会通过SPI、I2C或8位数据总线来操作DM9000芯片,以完成相应的功能。

3.软件配置:在驱动程序中提供相应的函数,用于配置DM9000芯片的相关参数。

例如,设置MAC地址、IP地址和子网掩码等。

这些参数在网络通信中是必须的,可以通过调用驱动程序提供的函数进行配置。

4.连接网络:确保主控芯片与DM9000芯片所在的嵌入式系统已经连接到网络中,可以通过路由器进行连接。

u_boot 移植(一)之uboot配置编译

u_boot 移植(一)之uboot配置编译

u_boot 移植(一)之uboot配置编译一 、开发环境PC OS : Ubuntu 14.04SOC : 基于ARM Cortex-a8 核的S5PC100开发板 : FSC100u_boot : u-boot-2010.03编译器 : arm-cortex_a8-linux-gnueabi-gcc version 4.4.6二、目标1.Uboot 能从FSC100的 Nand Flash 正常启动2.Uboot 支持DM9000 网卡3.Uboot 支持Nand Flash 读、写、擦除4.Uboot 支持Linux 内核引动好了,接下来就进行移植uboot到FSC100开发板吧 。

三、建立自己的平台1、 下载源码我们可以在下面这个网站上下载最新的和以前任一版本的 ubootftp://ftp.denx.de/pub/u-boot/2、 解压 uboot 源码并进入目录tar zxvf u-boot-2010.03.tar.gzcd u-boot-2010.03u-boot-2010.3 源码中已经支持了SMDKC100了(SMDKC100是三星公司基于SOC : S5PC100设计的一块开发板)。

我们的FSC100使用的SOC也是S5PC100,所以我们只需要稍加修改Uboot支持的SMDC100代码,就可以编译出支持我们的FSC100开发板的uboot了。

1.修改 u-boot 顶层目录下的 Makefile,指定交叉工具链在ifeq ($(HOSTARCH, $(ARCH))CROSS_COMPILE ?=endif下添加:ifeq (arm, $(ARCH))CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabiendif2.在 u-boot 顶层目录下的 Makefile 中添加 fsc100 配置信息在smdkc100_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 smdkc100 samsung s5pc1xx下添加:fsc100_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx3. 添加 fsc100 平台信息(1)进入board/samsung目录(2)拷贝smdkc100 为 fsc100(3)进入fsc100目录下修改smdkc100.c 为fsc100.c修改Makefile中的smkc100.o 为fsc100.o(4)进入include/configs目录,拷贝smdkc100.h为fsc100.hinclude/configs目录下的.h文件为对应开发板的配置文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
保存退出
5、修改完成,开始编译
make TQ2440_config
make CROSS_COMPILE=arm-linux-
把编译后在顶层目录生成的 u-boot.bin 通过 SAMBA 拷出来,通过 JTAG 或 JLINK 烧到开发 板!
-------- -------------- -------
…… /*修改环境变量*/ #define CONFIG_ETHADDDR 00:01:02:03:04:05 #define CONFIG_NETMASK 255.255.255.0 #define CONFIG_IPADDR 192.168.0.61 #define CONFIG_SERVERIP 192.168.0.60
case 2: printf("10M case 4: printf("100M half duplex ");
break; case 8:
printf("100M full duplex "); break; default: printf("unknown: %d ", lnk); break; } p rintf("mo d e \n");
#endif
return 0; }
重新编译,再烧写,问题解除。
今天成功的在天嵌 TQ2440 的板子上完成了 U-BOOT -DM9000 网卡驱动的移植!
实验使用的是国嵌实验 4-2-4 修改过的源码(u-boot-basic.tar.gz) 废话不说,记笔记:
mkdir 4-2-4 cp u-boot-basic.tar.gz 4-2-4/ cd 4-2-4 tar zxvf u-boot-basic.tar.gz
……… /*去掉上一实验注释掉的 BOOTCOMMAND*/ #define CONFIG_BOOTCOMMAND "tftp;bootm"
…… /*修改提示符*/ #define CFG_PROMPT "TQ2440" //把原来的 mini240 改为 TQ2440
…… 修改完成,保存退出
3、在 board 目录中创建属于 TQ2440 开发板的目录,并添加相应
/*添加 DM9000 的支持*/
#define CONFIG_DRIVER_DM9000 1 #define CONFIG_DM9000_BASE 0x20000300 //查 DM9000 芯片手册 #define DM9000_IO CONFIG_DM9000_BASE //查天嵌 TQ2440 电路原理图 #define DM9000_DATA (CONFIG_DM9000_BASE+4) #define CONFIG_DM9000_USE_16BIT
printf("could not establish link\n"); return 0; } }
/* see what we've got */ lnk = phy_read(17) >> 12; printf("operating at "); switch (lnk) { case 1:
printf("10M half duplex "); break;
保存退出
2、配置 TQ2440.h
cd 4-2-4/u-boot-2008.10/ cd include/configs/ cp mini2440.h TQ2440.h
vim TQ2440.h
…… /*修改开发板型号*/ #define CONFIG_ARM920T 1
//保持不变
#define CONFIG_S3C2440 1 //保持不变
参考 /u1/34474/showart.php?id=401078
修正 BUG(修改/drivers/dm9000.c 文件)
------------------------------具体修改如下:
vim dirivers/net/dm9000x.c 修改如下 ,屏蔽 掉红色 字体部 分
#define CONFIG_TQ2440 1 //修改原来的#define CONFIG_mini2440
…… /*修改网卡选项,屏蔽掉 CS8900 的部分*/
//#define CONFIG_DRIVER_CS8900 1
//#define CS8900_BASE 0x19000300
//#define CS8900_BUS16 1
…… LIB = $(obj)lib$(BOARD).a
COBJS := TQ2440.o flash.o //mini2440 改为 TQ2440 SOBJS := lowlevel_init.o ……
保存退出 ls 可以看到 TQ2440 目录下有 config.mk, flash.c, lowlevel_init.S, Makefile, TQ2440.c, u-boot.lds 6 个文件。
eth_init(bd_t * bd) {
......
DM9000_iow(DM9000_IMR, IMR_PAR);
#if 0 i = 0; while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */
udelay(10 00) ; i++; if (i == 10000) {
…… …… /*添加 U-BOOT 支持的命令,特别是 PING 命令*/ #include <config_cmd_default.h> #define CONFIG_CMD_CACHE #define CONFIG_CMD_DATE #define CONFIG_CMD_ELF #define CONFIG_CMD_PING //添加 PING 命令支持
的文件
mkdir -p board/TQ2440 cp -a board/mini2440/* board/TQ2440
cd board/TQ2440 mv mini2440 TQ2440 //修改为 TQ2440 相应的文件
保存退出
/*修改/board/TQ2440 目录下的 Makefile*/
链接好串 口,设 置好波 特率, 端口等 参数, 启动开 发板 设置 MAC 地址,IP 地址等参数 使用 Ping 命令测试,ping 192.168.0.60 成功 Ping 到虚拟机。
扩展测试: 通过 tftp 下载移植好的支持 NFS 根文件系统的内核 uImage-nfs tftp 30000000 uImage-nfs
1、修改 U-BOOT 源码顶层目录的 Makefile
cd 4-2-4/u-boot-2008.10/ vim Makef ile
/*参考 SMDK2410, 添加新的配置选项*/ TQ2440_config : unconfig
@./mkconfig $(@:_config=) arm arm920t TQ2440 NULL s3c24x0
使用 bootm 命令启动系统 bootm 30000000
成功启动系统,如下图:
—————————————————————————————— 完善: (1)网卡的 MAC 地址与你设置的不一样 (2)会有“could not establish link” 的提示,而且在显示 MAC 地址后很久后才响应。
4、修改 cpu/arm920t/s3c24x0/interrups.c
tbclk = timer_load_val * 100; #elif defined(CONFIG_SBC2410X) || \
defined(CONF IG_SMDK2410) || \ defined(CONF IG_MINI2440) || \ defined(CONF IG_TQ2440) || \ defined(CONF IG_VCMA9) || \ tbclk = CF G_HZ; ……
相关文档
最新文档