当前位置:文档之家› 基于S3C2440_uboot2010.06的移植手册

基于S3C2440_uboot2010.06的移植手册

基于S3C2440_uboot2010.06的移植手册
基于S3C2440_uboot2010.06的移植手册

目录

说明 (2)

准备工作 (2)

增加对S3C2440平台的支持 (4)

增加NorFlash驱动支持 (12)

添加NAND驱动 (14)

增加对NAND启动方式支持 (20)

加入网卡DM9000驱动支持 (31)

加入MTD(NAND)分区 (36)

启动zImage内核的支持 (38)

USB设备驱动支持 (45)

烧写YAFFS2文件系统支持 (52)

使U-BOOT支持jffs2文件系统 (56)

实现Tab键命令自动补齐、上下箭头键调用历史命令 (57)

修改命令提示符 (57)

添加启动菜单 (57)

添加LCD驱动和LOGO制作 (61)

附录一深度分析NandFlash—控制器参数TACLS、TWRPH0和TWRPH1的确定 (71)

附录二CONFIG_DM9000_BASE值的确定 (74)

附录三全局配置选项说明 (76)

附录四Uboot常用命令 (78)

说明

Uboot版本:2010.06

交叉编译器版本:arm-linux-gcc 4.3.2

操作系统版本:Ubuntu 13.10

开发板平台:

ARM920T—TX2440

NOR FLASH:EN29LV160BB-70TIP (2M) x8bit

NAND FLASH: K9F2G08U0B (256M+8M)x8bit

SDRAM:H57V2562GTR-75C x 2 (32M) x 2

网卡: DM9000E

显示器:AT070TN90(7’ TFTLCD)

本文档主要参考了XC2440和TX2440的移植手册,并结合自己的移植经验,还有一些帮助资料,更好地解释某些移植步骤的原因。

源代码下载地址:

https://www.doczj.com/doc/7d452536.html,/s/1Geq0b

移植uboot步骤说明:

以下是根据长期的开发经验总结出的uboot移植开发的步骤,供学习者参考,本手册也是大体按照这个步骤进行的。

做uboot移植开发,首先要保证uboot能适应自己的硬件平台,然后要能实现在flash上烧写系统和引导系统的功能,这些基本的功能做好以后,就可以给uboot加入一些辅助的功能,使uboot功能更强更方便使用。

准备工作

解压源码:

tar xjvf u-boot-2010.06.tar.bz2

源码目录加上所有权限

sudo chmod 777 u-boot-2010.06 –R(参数-R表示递归地改变每个子目录下文件的权限)

进入源码目录:

cd u-boot-2010.06

源码结构说明:

arch:各种架构CPU相关的文件,类似linux的arch目录

arch/arm/cpu:ARM架构的各种CPU的初始化文件,我们用到的是arm920t/s3c24xx

arch/arm/include:ARM架构各种CPU相关的头文件,我们用到的是asm/arch-s3c24x0

arch/arm/lib:ARM架构相关的库文件

board:常用的主板BSP文件,每一种板对应一个目录,如smdk2410 common:与架构无关的通用函数的实现,包括main函数,各种命令的实现drivers:通用的设备驱动程序

fs:文件系统的实现,包括yaffs2、cramfs、ext2、jffs2等

include:全局的头文件和主板的配置文件

lib:平台无关的通用库文件

net:网络协议相关的文件

post:开机自检相关的文件

tools:uboot自带的工具

我们移植的时候,只需要编译和我们目标硬件平台相关的文件,这就需要对编译选项进行配置,告诉系统,需要编译到哪些目录下编译哪些文件,这些都是通过Makefile文件来实现的。

首先,打开主目录下的Makefile文件,找到如下内容:

smdk2410_config :unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

这个是针对三星smdk2410开发板的配置选项,这个开发板使用的S3C2410处理器,和我们使用的S3C2440处理器是类似的,大部分配置可以通用,但是在某些硬件方面也有一些差别,需要我们自己编写代码,以支持S3C2440处理器。配置各项含义如下:

arm:CPU的架构(ARCH) arm920t:CPU的类型(CPU)

smdk2410:开发板的型号(BOARD)

samsung:开发者/或经销商(VENDER)

s3c24x0:片上系统(SOC)

配置选项所代表的目录关系说明:

ARCH:对应于主目录下的arch/arm目录

CPU:对应于arch/arm/cpu目录下的子目录,此值为arm920t,就使用arch/arm/cpu/arm920t目录下的代码

BOARD:开发板的主目录,位于board目录下,要和下面的VENDER字段配合使用

VENDER:对应于board目录下的子目录,此值为samsung,那么BOARD目录就包含在board/samsung子目录下,BOARD的值为smdk2410,那对应的开发板目录即为:board/samsung/smdk2410;如果VENDER的值为NULL,开发板目录即为:board/smdk2410

SOC:对应于是CPU目录下的子目录,此值为s3c24x0,CPU为arm920t,对应的目录为:arch/arm/cpu/arm920t/s3c24x0

增加对S3C2440平台的支持

修改主目录下的Makefile文件

在smdk2410之后仿照smdk2410的配置添加针对smdk2440开发板的配置:smdk2410_config :unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

smdk2440_config :unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 samsung s3c24x0 (注意:第二行前面是TAB键,而不是空格!!)

指定交叉编译器,修改第159行为:

CROSS_COMPILE ?=arm-linux-

建立自己的目标板

在board/samsung目录下,新建自己的开发板目录smdk2440,把board/samsung/smdk2410目录下的所有文件拷到smdk2440目录下,把smdk2410.c改名为smdk2440.c。修改该目录下的Makefile(第28行),把smdk2410.o改为smdk2440.o。

COBJS :=smdk2440.o flash.o

SOBJS :=lowlevel_init.o

删除board目录下的所有文件夹,只保留samsung目录。

删除samsung目录下的所有文件夹,只保留smdk2440目录。

创建配置文件

在include/configs目录下创建开发板的配置头文件,把smdk2410.h复制为smdk2440.h,我们的uboot只需要用到这一个配置文件,其他的文件都没有用了。删除include/configs目录下所有文件,只保留smdk2440.h

删除arch目录中多余文件

进入arch目录,删除所有文件夹,只保留arm目录。

进入arm/cpu目录,删除所有文件夹,只保留arm920t目录

进入arm920t目录,删除其他cpu文件夹,只保留s3c24x0

进入arch/cpu/include/asm目录,删除类似arch-xxx的文件夹,只保留s3c2440架构的

开灯

修改arch/arm/cpu/arm920t/start.S文件中的LED部分

mrs r0, cpsr

bic r0, r0, #0x1f

orr r0, r0, #0xd3

msr cpsr, r0

/*bl coloured_LED_init

bl red_LED_on*/

@ All LED on

#define GPIO_CTL_BASE 0x56000000

#define oGPIO_F 0x50

#define oGPIO_CON 0x0

#define oGPIO_DAT 0x4

#define oGPIO_UP 0x8

mov r1, #GPIO_CTL_BASE

add r1, r1, #oGPIO_F

ldr r2,=0xff55

str r2, [r1, #oGPIO_CON]

mov r2, #0xff

str r2, [r1, #oGPIO_UP]

mov r2, #0x00

str r2, [r1, #oGPIO_DAT]

关闭中断

修改arch/arm/cpu/arm920t/start.S文件中的中断关闭部分:

# if defined(CONFIG_S3C2410)

ldr r1, =0x3ff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif

# if defined(CONFIG_S3C2440)

ldr r1, =0x7fff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif

由于需要定义CONFIG_S3C2440,所以在include/configs/smdk2440.h中添加CONFIG_S3C2440的定义。

#define CONFIG_ARM920T 1 /* This is an ARM920T Core */

#define CONFIG_S3C24X0 1 /* in a SAMSUNG S3C24x0-type SoC */

#define CONFIG_S3C2410 1 /* specifically a SAMSUNG S3C2410 SoC */

#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */

#define CONFIG_S3C2440 1

修改时钟

因为我们使用的代码是2410平台的,2410和2440处理器的时钟设置有差别,需要修改以适应于2440处理器,否则系统不能运行。

修改arch/arm/cpu/arm920t/start.S文件中的时钟初始化部分:

添加MPLLCON的地址

# define INTSUBMSK 0x4A00001C

# define CLKDIVN 0x4C000014 /* clock divisor register */

# define MPLLCON 0x4C000004

# endif

添加时钟设置

先屏蔽掉2410的CLKDIVN的设置

#if 0

/* FCLK:HCLK:PCLK= 1:2:4 */

/* default FCLK is 120 MHz !*/

ldr r0, =CLKDIVN

mov r1, #3

str r1, [r0]

#endif

/* FCLK:HCLK:PCLK = 1:4:8 UCLK = UPLL*/

ldr r0, =CLKDIVN

mov r1, #5

str r1, [r0]

mrc p15, 0, r1, c1, c0, 0

orr r1, r1, #0xc0000000

mcr p15, 0, r1, c1, c0, 0

ldr r1, =MPLLCON

ldr r2, =0x5c011

str r2, [r1] @400mhz

说明:mrc p15, 0, r1, c1, c0, 0、orr r1, r1, #0xc0000000、mcr p15, 0, r1, c1, c0, 0这3句程序非常重要,对于S3C2440,CLKDIVN的第【2:1】位为HDIVN,如果HDIVN 非0,CPU总线模式应该从“快速总线模式”转换为“异步总线模式”,可以通过上面的3句程序实现。否则CPU的工作频率将自动变成HCLK,不再是FCLK。具体详见《S3C2440用户手册》第7章FCLK、HCLK和PCLK部分。这对SDRAM的初始化至关重要。

同时把smdk2440.c中的clock初始化代码部分屏蔽掉

#if 0

#define FCLK_SPEED 1

#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */

#define M_MDIV 0xC3

#define M_PDIV 0x4

#define M_SDIV 0x1

#elif FCLK_SPEED==1 /* Fout = 202.8MHz */

#define M_MDIV 0xA1

#define M_PDIV 0x3

#define M_SDIV 0x1

#endif

#define USB_CLOCK 1

#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

添加以下宏定义

#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) // 400MHz #define S3C2440_UPLL_48MHZ ((0x38<<12)|(0x02<<4)|(0x02)) // 48MHz

修改board_init函数中时钟部分:

/* to reduce PLL lock time, adjust the LOCKTIME register */

clk_power->LOCKTIME = 0xFFFFFF;

/* configure UPLL */

clk_power->UPLLCON = S3C2440_UPLL_48MHZ; //fin=12.000MHz

/* some delay between MPLL and UPLL */

delay(4000);

/* configure MPLL */

clk_power->MPLLCON = S3C2440_MPLL_400MHZ; //fin=12.000MHz

/* some delay between MPLL and UPLL */

delay(8000);

参照《S3C2440用户手册》:当你设置MPLL 和UPLL 的值时,你必须首先设置UPLL 值再设置MPLL 值。(大约需要7 个NOP 的间隔)

修改获得时钟接口函数

现在已经完成了S3C2440平台的时钟设置,但是串口还不能正常打印信息。因为串口的波特率是要根据PCLK来计算的,在drivers/serial/serial_s3c24x0.c的_serial_setbrg函数中使用get_PCLK函数获得前面设置的PCLK时钟计算串口波特率,get_PCLK的实现文件为:arch/arm/cpu/arm920t/s3c24x0/speed.c 这个文件里实现几个获得时钟频率的接口函数,供驱动中调用,但是适应于S3C2410平台的,和S3C2440平台的有差别,我们也要改成适应于S3C2440平台的。

修改get_PLLCLK函数

static ulong get_PLLCLK(int pllreg)

{

……………………

//return (CONFIG_SYS_CLK_FREQ *m) / (p << s);

return (CONFIG_SYS_CLK_FREQ * m * 2) / (p <

}

CONFIG_SYS_CLK_FREQ在include/configs/smdk2440.h中定义,为12000000

加入关于时钟分频的宏定义,在下面的get_HCLK函数中要用到:

#define S3C2440_CLKDIVN_HDIVN_MASK (3<<1)

#define S3C2440_CLKDIVN_HDIVN_1 (0<<1)

#define S3C2440_CLKDIVN_HDIVN_2 (1<<1)

#define S3C2440_CLKDIVN_HDIVN_4_8 (2<<1)

#define S3C2440_CLKDIVN_HDIVN_3_6 (3<<1)

#define S3C2440_CAMDIVN_HCLK3_HALF (1<<8)

#define S3C2440_CAMDIVN_HCLK4_HALF (1<<9)

下面需要分别修改get_HCLK函数,大致思路是:根据CLKDIVN和CAMDIVN的值计算出时钟分频值,再用FCLK除以分频值得到HCLK和PCLK。

因为要用到CAMDIVN寄存器,这是S3C2440才带有的,S3C2410的代码中没有此寄存器,我们需要在寄存器声明的头文件中加入。

寄存器声明头文件路径为:arch/arm/include/asm/arch-s3c24x0/s3c24x0.h

struct s3c24x0_clock_power {

……………

u32 CLKDIVN;

u32 CAMDIVN;

};

回到speed.c文件,修改get_HCLK函数:

ulong get_HCLK(void)

{

struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();

unsigned long clkdiv;

unsigned long camdiv;

int hdiv;

clkdiv = readl(&clk_power->CLKDIVN);

camdiv = readl(&clk_power->CAMDIVN);

switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {

case S3C2440_CLKDIVN_HDIVN_1:

hdiv = 1;

break;

case S3C2440_CLKDIVN_HDIVN_2:

hdiv = 2;

break;

case S3C2440_CLKDIVN_HDIVN_4_8:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;

break;

case S3C2440_CLKDIVN_HDIVN_3_6:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;

break;

}

//return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();

return get_FCLK() / hdiv;

}

get_PCLK函数不用修改。

设置内存参数

board/samsung/smdk2440/lowlevel_init.S是用于初始化S3C2440的存储控制器,我们主要看SDRAM所接的Bank6的设置,Bank7没有用到

#define B6_BWSCON (DW32) /* Bandk6的位宽是32位*/

#define B6_MT 0x3 /* SDRAM */

#define B6_Trcd 0x1

#define B6_SCAN 0x1 /* 9bit */

/* REFRESH parameter */

#define REFEN 0x1 /* Refresh enable */

#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */

#define Trp 0x0 /* 2clk */

#define Trc 0x3 /* 7clk */

#define Tchr 0x2 /* 3clk */

//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz,(2048+1-15.6*60) */ #define REFCNT 0x4f5

REFCNT是SDRAM的刷新率,这个值要根据总线频率和所使用的SDRAM做相应修改.

计算公式:刷新周期 = (211 - REFCNT + 1) / HCLK

怎么确定所用SDRAM的刷新周期呢?

目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样每一行的刷新所用时间就是64ms/行数,即刷新周期。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms 或8K Refresh Cycles/64ms的标识,这里的4096与8K就代表这个芯片中每个L-Bank 的行数。刷新命令一次对一行有效,刷新周期也是随总行数而变化,4096行时为15.625us,8K行时就为7.8125us

修改u-boot.lds:

路径为arch/arm/cpu/arm920t/u-boot.lds,把lowlevel_init.S的目标文件加入到.text 中:

.text :

{

arch/arm/cpu/arm920t/start.o (.text)

board/samsung/smdk2440/lowlevel_init.o (.text)

*(.text)

}

u-boot.lds决定了u-boot可执行映像的连接方式,以及各个段的装载地址(装载域)和执行地址(运行域),防止这个目标文件被放在 4K―起步石‖之后。

指定MACH_TYPE

在board/samsung/smdk2440/smdk2440.c文件中的board_init()函数中,查看gd->bd->bi_arch_number变量的值,即为MACH_TYPE:

/* arch number of S3C2440-Board */

gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

MACH_TYPE在arch/arm/include/asm/mach-types.h文件定义,其中MACH_TYPE_S3C2440的值是362,这个要和内核中的mach-types一致,如果使用我们提供的内核,此值不用改。

MACH_TYPE只是在启动linux内核时用到,不影响uboot的运行。

到此,uboot在S3C2440平台的基础移植工作已完成,接下来编译u-boot,然后在开发板上运行一下,验证是否可以正常启动。

执行

make smdk2440_config

成功后显示:

执行make all,生成的uboot.bin烧入开发板,暂时只能烧写到NorFlash中。

成功后显示:

增加NorFlash驱动支持

根据上一节打印出的信息可以看到,现在检测到的Flash容量是512kB的,因为uboot默认的NorFlash配置是AM29LV400,TX2440上使用的NorFlash型号为EN29LV160BB(容量2M),我们需要修改成2M NorFlash的配置。

(注意:以下仅仅是修改了NorFlash的Size和Sectors Number的定义,驱动都是一样的。EN29LV160B是bottom boot sector,容量16Mbit,这与include/flash.h 中AM29LV160B定义类似,所以我们可以定义NorFlash型号为AM29LV160)

修改include/configs/smdk2440.h

注释掉AM29LV400和AM29LV800的定义,加入AM29LV160的定义:

#if 0

#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */

#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */

#endif

#define CONFIG_AMD_LV160 1

……

#ifdef CONFIG_AMD_LV400

#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */

#define CONFIG_SYS_MAX_FLASH_SECT (11) /* max number of sectors on one chip */

#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) /* addr of environment */

#endif

#ifdef CONFIG_AMD_LV160

#define PHYS_FLASH_SIZE 0x00200000 /* 2MB */

#define CONFIG_SYS_MAX_FLASH_SECT (35) /* max number of sectors on one chip */

#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET) /* addr of environment */

#endif

注释掉在nor flash中保存环境变量的宏,定义在nand flash中保存环境变量的宏,否则编译时会出错:

#define CONFIG_ENV_IS_IN_FLASH 1 //暂时未注释,因为目前还没有NAND的驱动

//#define CONFIG_ENV_IS_IN_NAND 1

#define CONFIG_ENV_OFFSET 0x100000

#define CONFIG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */ sector(扇区)的数量根据芯片手册而得,35个。

CONFIG_ENV_ADDR 是环境变量的保存地址。

CONFIG_SYS_FLASH_BASE是FLASH的起始地址,即0。

CONFIG_ENV_OFFSET是环境变量的偏移地址,即Uboot分区中params分区(这在后面NAND FLASH移植部分)的起始地址,所以要统一。环境变量最好保存在NAND FLASH中,目前只修改了NOR FLASH部分,还未添加NAND FLASH驱动,所以暂时保留了CONFIG_ENV_IS_IN_FLASH的定义,将环境变量保存至NOR FLASH,后面添加了NAND FLASH驱动后再注释掉。

CONFIG_ENV_SIZE是环境变量大小,即params分区大小。

修改board/samsung/smdk2440/flash.c

在flash_init函数中加入flash_id:

#elif defined(CONFIG_AMD_LV800)

(AMD_MANUFACT &FLASH_VENDMASK) |

(AMD_ID_LV800B &FLASH_TYPEMASK);

#elif defined(CONFIG_AMD_LV160)

(AMD_MANUFACT & FLASH_VENDMASK) |

(AMD_ID_LV160B & FLASH_TYPEMASK);

#else

flash_print_info函数加入显示flash_info语句:

case(AMD_ID_LV800B &FLASH_TYPEMASK):

printf("1x Amd29LV800BB (8Mbit)\n");

break;

case (AMD_ID_LV160B & FLASH_TYPEMASK):

printf ("1x Amd29LV160B (2M)\n");

break;

再此编译,,建议每次编译前都清除一下上次编译留下的中间代码:

#make clean

#make smdk2440_config

#make all

生成u-boot.bin,烧入开发板。成功后,会发现Flash已经变成2MB了。

在开发板中输入命令:flinfo,会显示:

RO表示该扇区处于写保护状态,是只读的

在对该扇区擦除、写入之前,要先解除写保护,命令为:protect off all

擦除Flash操作:

erase all 擦除整片Flash

erase start end 擦除sectors 如:erase 0x20000 0x2ffff

erase start +len 擦除指定大小如:erase 0x40000 + 0x12345

写入Flash操作:

cp.b 内存地址Flash地址文件大小

如:cp.b 0x30000000 0 0x12345

作用是:将内存地址0x30000000处的内容写入到Norflash的0地址开始处,写入的数据大小为0x12345

添加NAND驱动

在uboot中已经带有完善的MTD/NAND驱动,支持S3C2410的NAND控制器驱动,驱动文件为:drivers/mtd/nand/s3c2410_nand.c

我们使用的S3C2440的NAND控制器和S3C2410的有很大差别,需要修改驱动。

修改include/configs/smdk2440.h,加入NAND的定义:

/*NAND flash settings*/

#define CONFIG_CMD_NAND

#if defined(CONFIG_CMD_NAND)

#define CONFIG_NAND_S3C2440

#define CONFIG_SYS_NAND_BASE 0x4E000000 //Nand配置寄存器基地址,nand.c要

用到

#define CONFIG_SYS_MAX_NAND_DEVICE 1 //nand个数,nand.c要用到

#endif

修改cpu的寄存器声明的头文件,arch/arm/include/asm/arch-s3c24x0/s3c24x0.h 在结构体s3c2410_nand之后添加S3C2440 NAND控制器寄存器声明:

struct s3c2440_nand {

u32 NFCONF;

u32 NFCONT;

u32 NFCMMD;

u32 NFADDR;

u32 NFDATA;

u32 NFMECCD0;

u32 NFMECCD1;

u32 NFSECCD;

u32 NFSTAT;

u32 NFESTAT0;

u32 NFESTAT1;

u32 NFMECC0;

u32 NFMECC1;

u32 NFSECC;

u32 NFSBLK;

u32 NFEBLK;

};

修改cpu架构头文件:

在arch/arm/include/asm/arch-s3c24x0/目录中复制s3c2410.h为s3c2440.h,替换内容中s3c2410为s3c2440,替换内容中S3C2410为S3C2440(注意大小写)。

修改s3c24x0_cpu.h,将s3c2410部分改为s3c2440

#elif defined CONFIG_S3C2400

#include

#elif defined CONFIG_S3C2440

#include

#else

在drivers/mtd/nand目录中新增s3c2440_nand.c(参照s3c2410_nand.c修改)

#include

#include

#include

#include

define S3C2440_NFCONF_TACLS(x) ((x)<<12)

#define S3C2440_NFCONF_TWRPH0(x) ((x)<<8)

#define S3C2440_NFCONF_TWRPH1(x) ((x)<<4)

#define S3C2440_NFCONT_SECCL (1<<6)

#define S3C2440_NFCONT_MECCL (1<<5)

#define S3C2440_NFCONT_INITECC (1<<4)

#define S3C2440_NFCONT_nCE (1<<1)

#define S3C2440_NFCONT_MODE (1<<0)

#define S3C2440_ADDR_NALE 0x08

#define S3C2440_ADDR_NCLE 0x0c

#ifdef CONFIG_NAND_SPL

/* in the early stage of NAND flash booting, printf() is not available */ #define printf(fmt, args...)

static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) {

int i;

struct nand_chip *this = mtd->priv;

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

buf[i] = readb(this->IO_ADDR_R);

}

#endif

static void s3c2440_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)

{

struct nand_chip *chip = mtd->priv;

struct s3c2440_nand *nand = s3c2440_get_base_nand();

debugX(1, "hwcontrol(): 0x%02x 0x%02x\n", cmd, ctrl);

if (ctrl & NAND_CTRL_CHANGE) {

ulong IO_ADDR_W = (ulong)nand; //NAND控制寄存器基地址

if (!(ctrl & NAND_CLE)) //要写的是地址

IO_ADDR_W |= S3C2440_ADDR_NCLE;

if (!(ctrl & NAND_ALE)) //要写的是命令

IO_ADDR_W |= S3C2440_ADDR_NALE;

if (cmd == NAND_CMD_NONE)

IO_ADDR_W = &nand->NFDATA;//在写完命令和地址后,一定还要把IO 端口的地址重新设置为寄存器NFDATA

chip->IO_ADDR_W = (void *)IO_ADDR_W;

if (ctrl & NAND_NCE)

writel(readl(&nand->NFCONF) &~S3C2440_NFCONT_nCE,

&nand->NFCONF); //使能nand flash

else

writel(readl(&nand->NFCONF) | S3C2440_NFCONT_nCE,

&nand->NFCONF); //禁止nand flash

}

if (cmd != NAND_CMD_NONE)

writeb(cmd, chip->IO_ADDR_W);

}

static int s3c2440_dev_ready(struct mtd_info *mtd)

{

struct s3c2440_nand *nand = s3c2440_get_base_nand();

debugX(1, "dev_ready\n");

return readl(&nand->NFSTAT) & 0x01;

}

#ifdef CONFIG_S3C2440_NAND_HWECC

void s3c2440_nand_enable_hwecc(struct mtd_info *mtd, int mode)

{

struct s3c2440_nand *nand = s3c2440_get_base_nand();

debugX(1, "s3c2440_nand_enable_hwecc(%p, %d)\n", mtd, mode);

writel(readl(&nand->NFCONF) | S3C2440_NFCONF_INITECC, &nand->NFCONF); }

static int s3c2440_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat,

u_char *ecc_code)

{

struct s3c2440_nand *nand = s3c2440_get_base_nand();

ecc_code[0] = readb(&nand->NFECC);

ecc_code[1] = readb(&nand->NFECC + 1);

ecc_code[2] = readb(&nand->NFECC + 2);

debugX(1, "s3c2440_nand_calculate_hwecc(%p,): 0x%02x 0x%02x 0x%02x\n", mtd , ecc_code[0], ecc_code[1], ecc_code[2]);

return 0;

}

static int s3c2440_nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc)

{

if (read_ecc[0] == calc_ecc[0] &&

read_ecc[1] == calc_ecc[1] &&

read_ecc[2] == calc_ecc[2])

return 0;

printf("s3c2440_nand_correct_data: not implemented\n");

return -1;

}

#endif

int board_nand_init(struct nand_chip *nand)

{

u_int32_t cfg;

u_int8_t tacls, twrph0, twrph1;

struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();

struct s3c2440_nand *nand_reg = s3c2440_get_base_nand();

debugX(1, "board_nand_init()\n");

writel(readl(&clk_power->CLKCON) | (1 << 4), &clk_power->CLKCON);

/* initialize hardware */

tacls = 2;

twrph0 = 1;

twrph1 = 0;

cfg = 0;

cfg |= S3C2440_NFCONF_TACLS(tacls);

cfg |= S3C2440_NFCONF_TWRPH0(twrph0);

cfg |= S3C2440_NFCONF_TWRPH1(twrph1);

writel(cfg, &nand_reg->NFCONF); //配置NFCONF

cfg = S3C2440_NFCONT_SECCL;

cfg |= S3C2440_NFCONT_MECCL;

cfg |= S3C2440_NFCONT_INITECC;

cfg |= S3C2440_NFCONT_MODE;

writel(cfg, &nand_reg->NFCONT); //配置NFCONT

/* initialize nand_chip data structure */

nand->IO_ADDR_R = nand->IO_ADDR_W = (void *)&nand_reg->NFDATA;

nand->select_chip = NULL;

/* read_buf and write_buf are default */

/* read_byte and write_byte are default */

#ifdef CONFIG_NAND_SPL

nand->read_buf = nand_read_buf;

#endif

/* hwcontrol always must be implemented */

nand->cmd_ctrl = s3c2440_hwcontrol;

nand->dev_ready = s3c2440_dev_ready;

#ifdef CONFIG_S3C2440_NAND_HWECC

nand->ecc.hwctl = s3c2440_nand_enable_hwecc;

nand->ecc.calculate = s3c2440_nand_calculate_ecc;

nand->ecc.correct = s3c2440_nand_correct_data;

nand->ecc.mode = NAND_ECC_HW;

nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE;

nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES;

#else

nand->ecc.mode = NAND_ECC_SOFT;

#endif

#ifdef CONFIG_S3C2440_NAND_BBT

nand->options = NAND_USE_FLASH_BBT;

#else

nand->options = 0;

#endif

debugX(1, "end of nand_init\n");

return 0;

}

tacls、twrph0、twrph1怎么确定呢?

详见附录一“深度分析NandFlash-控制器参数TACLS、TWRPH0和TWRPH1的确定”。

修改drivers/mtd/nand/目录下Makefile

COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o

COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o

上面已完成对S3C2440的NAND驱动的支持,上一节的环境变量就可以保存在NAND FLASH了,修改include/configs/smdk2440.h

//#define CONFIG_ENV_IS_IN_FLASH 1 //暂时未注释,因为目前还没有NAND的驱动#define CONFIG_ENV_IS_IN_NAND 1//common目录Makefile,连接时要用

#define CONFIG_ENV_OFFSET 0x100000

再次编译uboot,烧入到Nor Flash中,就会检测到NANDFLASH。

使用nand命令:nand info

说明:现在我们的uboot中只是支持了NandFlash驱动,可以探测到Nand,但是还不支持从Nand启动,需要修改底层的启动代码以支持Nand启动方式。

使用命令:saveenv,保存环境变量

保存后,重启开发板,警告“*** Warning – bad CRC or NAND,using default environment‖不出现了。

增加对NAND启动方式支持

Nand启动原理:

如果将S3C2440配置成从NANDFLASH启动(将开发板的启动跳线帽插上,此时OM0管脚拉低)S3C2440的Nand控制器会自动把Nandflash中的前4K代码数据搬到内部SRAM中(地址为0x40000000),同时还把这块SRAM地址映射到了0x00000000地址,即0x40000000~0x40001000会被映射到0x00000000~0x00001000。CPU从0x00000000位置开始运行程序。

如果将S3C2440配置成从Norflash启动(将开发的启动跳线帽拔掉,此时OM0管脚拉高),0x00000000就是Norflash的物理起始地址,Norflash中的程序就从这

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

智能计算平台应用开发(初级)-实验手册-应用软件移植方案实践实验手册-学员用书

应用软件移植方案实践 实验手册 学员用书

目录 1 参考资料及工具 (1) 1.1 参考资料及工具 (1) 2 应用软件移植方案实践 (2) 2.1 课程介绍 (2) 2.2 教学目标 (2) 2.3 案例背景 (2) 2.4 任务 (3) 演练场景1:需求分析 (3) 演练场景2:实施准备 (4) 演练场景3:方案实施 (5) 演练场景4:方案验收 (6) 2.5 评分表 (7)

1 参考资料及工具 1.1 参考资料及工具 文档中所列出的命令以及参考文档,请根据实际环境中的不同产品版本使用对应的命令以及文档。 参考文档: 1. 华为鲲鹏代码迁移工具用户指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 编译器和工具链> 开发工具 2. 华为鲲鹏分析扫描工具用户指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 编译器和工具链> 开发工具 3. Nginx软件安装指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 软件安装指南 4. PHP软件安装指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 软件安装指南

2 应用软件移植方案实践 2.1 课程介绍 【开发者设计提供引导员的开场白,为新老师提供便利,以下是作为参考】 本章的内容主要为应用软件从x86计算平台向鲲鹏计算平台的迁移实践指导。 2.2 教学目标 ●能完成应用迁移项目的需求分析; ●能完成应用迁移项目的实施准备; ●能完成应用迁移项目的方案实施; ●能完成应用迁移项目的方案验收。 2.3 案例背景 说明:本文所涉及的案例仅为样例,实际操作中请以真实设备环境为准,具体配置步骤请参考对应的产品文档。 在这个数字时代,银行业务面临转型与重塑,为此银行应当实施数字化战略,通过构建有力的支撑体系及IT能力助力数字化转型,从而保持在金融行业的领先地位。 为更好的推进H银行的数字化转型,企业决定将现有的业务平台迁移至华为鲲鹏计算平台,为异构计算、大数据分析等新兴业务提供更好的算力支撑。 假设您是本次项目技术负责人工程师A,需要完成如下任务: ●需求分析; ●实施准备; ●方案实施; ●方案验收。 说明:本手册涉及的操作物理环境下与云环境下均适用,故在此不作区分。

华为常用实验手册范本

目录 实验一以太网交换机基本配置 (1) 实验二以太网端口配置实验 (7) 实验三利用TFTP管理交换机配置 (13) 实验四虚拟局域网VLAN (16) 实验五生成树配置 (25) 实验六802.1x和AAA配置 (38) 实验七路由器基本配置 (45) 实验八PPP配置 (51) 实验九FR配置 (56) 实验十静态路由协议配置 (64) 实验十一RIP协议配置 (68) 实验十二OSPF协议配置 (74) 实验十三访问控制列表配置 (88) 实验十四地址转换配置 (95) 实验十五DHCP配置 (101) 实验十六升级路由器或交换机的操作系统 (116)

实验一以太网交换机基本配置 【实验目的】 掌握以太网交换机基本配置 【实验学时】 建议2学时 【实验原理】 一、交换机常用命令配置模式 1 业务描述 (1)Quidway系列产品的系统命令采用分级保护方式,命令被划分为参观级、监控级、配 置级、管理级4个级别,简介如下: ?参观级:网络诊断工具命令(ping、tracert)、从本设备出发访问外部设备的命 令(包括:Telnet客户端、RLogin)等,该级别命令不允许进行配置文件保存的 操作。 ?监控级:用于系统维护、业务故障诊断等,包括display、debugging命令,该 级别命令不允许进行配置文件保存的操作。 ?配置级:业务配置命令,包括路由、各个网络层次的命令,这些用于向用户提供 直接网络服务。 ?管理级:关系到系统基本运行,系统支撑模块的命令,这些命令对业务提供支撑 作用,包括文件系统、FTP、TFTP、XModem下载、配置文件切换命令、电源 控制命令、备板控制命令、用户管理命令、命令级别设置命令、系统部参数设置 命令等。 (2)命令视图: 系统将命令行接口划分为若干个命令视图,系统的所有命令都注册在某个(或某些)命令视图下,只有在相应的视图下才能执行该视图下的命令: 各命令视图的功能特性、进入各视图的命令等的细则: ◆命令视图功能特性列表

H3C-系统实验手册

2016年南通市地税系统实验手册 目录 实验一:通过Telnet方式登录交换机典型配置举例 (2) 实验二:基于端口的VLAN典型配置举例 (3) 实验三:802.1X认证配置举例 (4) 实验四:网络地址转换配置举例 (6) 实验五:DHCP配置举例 (9) 实验六:静态路由 (10) 实验七:配置OSPF基本功能 (11)

实验一:通过Telnet方式登录交换机典型配置举例 组网图 配置步骤 (1)配置Device接口地址 #配置接口GigabitEthernet0/0地址为192.168.100.230/24。 system [Sysname] interface GigabitEthernet 0/0 [Sysname-GigabitEthernet0/0] ip address 192.168.100.230 24 [Sysname-GigabitEthernet0/0] quit (2)配置认证 #设置VTY的认证模式为scheme。 [Sysname] line vty 0 15 [Sysname-line-vty0-15] authentication-mode scheme [Sysname-line-vty0-15] quit #创建设备管理类本地用户admin。 [Sysname] local-user admin #指定本地用户的授权用户角色为network-admin [Sysname-luser-manage-admin] authorization-attribute user-role network-admin #配置该本地用户的服务类型为Telnet。 [Sysname-luser-manage-admin] service-type telnet #配置该本地用户密码为密文admin。 [Sysname-luser-manage-admin] password simple admin [Sysname-luser-manage-admin] quit (3)开启Telnet服务 [Sysname] telnet server enable

《计算机控制系统》实验手册

《计算机控制系统》实验手册 上海海事大学电气自动化系施伟锋 上海海事大学电气自动化实验中心李妮娜 目录 1《计算机控制系统》实验指导(Matlab版) (2) 实验一数字PID参数的整定 (3) 实验二Smith算法的运用..........................................5实验三二阶对象数字控制系统设计..............................7实验四达林控制算法的运用 (9) 2 《计算机控制系统》实验指导(DSP版) (11) 实验一实验系统介绍与CCS软件使用入门 (11) 实验二数字I/O实验—交通灯实验 (26) 实验三PWM输出实验1——直流电机控制实验 (30) 3 《计算机控制系统》课程设计指导(Matlab版)………33 4 《计算机控制系统》课程设计指导(DSP版) (35) 5 《计算机控制系统》课程设计报告或小论文格式 (40)

《计算机控制系统》实验指导 (Matlab 版) 一、实验课程教学目的与任务 通过实验设计或计算机仿真设计,使学生了解和掌握数字PID控制算法的特点、了解系统PID参数整定和数字控制系统的直接设计的基本方法,了解不同的控制算法对被控对象的控制特性,加深对计算机控制系统理论的认识,掌握计算机控制系统的整定技术,对系统整体设计有一个初步的了解。 根据各个实验项目,完成实验报告(用实验报告专用纸)。 二、实验要求 学生在熟悉PC机的基础上,熟悉MATLAB软件的操作,熟悉Simuli nk工具箱的软件编程。通过编程完成系统的设计与仿真实验,逐步学习控制系统的设计,学习控制系统方案的评估与系统指标评估的方法。 计算机控制系统主要技术指标和要求: 根据被控对象的特性,从自动控制系统的静态和动态质量指标要求出发对调节器进行系统设计,整体上要求系统必须有良好的稳定性、准确性和快速性。一般要求系统在振荡2~3次左右进入稳定;系统静差小于3%~5%的稳定值(或系统的静态误差足够小);系统超调量小于30%~50%的稳定值;动态过渡过程时间在3~5倍的被控对象时间常数值。 系统整定的一般原则: 将比例度置于交大值,使系统稳定运行。根据要求,逐渐减小比例度,使系统的衰减比趋向于4:1或10:1。若要改善系统的静态特性,要使系统的静差为零,加入积分环节,积分时间由大向小进行调节。若要改善系统的动态特性,增加系统的灵敏度,克服被控对象的惯性,可以加入微分环节,微分时间由小到大进行调节。PID控制的三个特性参数在调节时会产生相互的影响,整定时必需综合考虑。系统的整定过程是一个反复进行的过程,需反复进行。

实验 手册范本

实验 4.1 练习 1:在 Brew MP Simulator 6 中运行样例应用程序 在 Brew MP Simulator 6 中运行样例程序应用程序: 1.从“开始”菜单中,启动适用 于 Qualcomm Brew MP SDK 的 Brew MP SDK Manager。 2.在 SDK Manager 中,要显示制 作工具和运行时工具,请单击“工具”选项卡。 3.启动 Target Manager。 4.单击“翻盖手机”设备配置文 件,然后单击“创建目标”。

5.当提示您输入“目标名称”时,保留默认名称,然后单击“继续”。 6.在“Simulator 目标”窗口中,双击“翻盖手机”。 7.在模拟设备上,启动AppManager。 8.选择 C Localized App 应用程序。使用鼠标模拟设备上的按键功能。 9.要退出应用程序,请按“电源(结束)”。 10.在 AppManager 中,尝试其他应用程序。

11.完成后,关闭 Simulator 和 Target Manager。 练习 2:从 Visual Studio 安装样例源代码并运行 Simulator 将样例应用程序源代码安装到便携式计算机上: 1.从“开始”菜单中,启动 Brew MP SDK Manager。 2.要显示工具组和平台,请单击 “设置”。 3.在“工具组” “可选组件” 中,单击“安装”安装样例程序。 4.按照向导窗口中的提示进行操 作。请注意安装文件的位置。

使用安装的源代码打开项目: 1.在 Visual Studio 中,单击 “文件”→“打开”→“项目/解决方案”。 2.导航到已安装的源代码,选择 c_basicapp_VS.vcproj ,然后单击 “打开”。 3.在 Visual Studio Solution Explorer 窗格中,导航到“源文件”目录,然后双击 c_basicapp.c 加载文件。 4.在 Visual Studio 中,使用 Brew MP 插件工具栏执行以下操 作:

实验室管理系统用户手册

实验室管理系统用户手册 目录 1 系统设置简明步 骤 ..................................................................... . (4) 2 实验教 学 ..................................................................... . (4) 2.1 实验教学文 档 ..................................................................... (5) 2.1.1 专业培养计 划 ..................................................................... (5) 2.1.2 课程与项 目 ..................................................................... . (6) 2.1.3 实验项 目 ..................................................................... ...................................... 8 2.2 教学任务与安 排 ..................................................................... .. (9)

2.2.1 集中实践环 节 ..................................................................... (9) 2.2.2 教学任务 书 ..................................................................... . (9) 2.2.3 实验课程安 排 ..................................................................... (9) 2.2.4 实验课程调 整 ..................................................................... . (11) 2.2.5 实验教学计划 表 ..................................................................... (11) 2.2.6 实验成绩录 入 ..................................................................... . (11) 2.2.7 教学任务执行情 况 ..................................................................... .................... 11 2.3 实习与课程设 计 ..................................................................... (12)

嵌入式实时操作系统实验报告

嵌入式操作系统实验报告 系别: 班级: 学号: 姓名: 2013.12

实验一嵌入式开发环境的建立 一、实验目的 通过此实验系统,读者可以了解嵌入式实时操作系统uC/OS-II 的内核机制和运行原理。本实验系统展示了uC/OS-II 各方面的管理功能,包括信号量、队列、内存、时钟等。在各个实验中具体介绍了uC/OS-II 的相关函数。读者在做实验的同时能够结合理论知识加以分析,了解各个函数的作用和嵌入式应用程序的设计方法,最终对整个uC/OS-II 和嵌入式操作系统的应用有较为清楚的认识。 二、实验步骤 1. 安装集成开发环境LambdaEDU 集成开发环境LambdaEDU 的安装文件夹为 LambdaEDU ,其中有一个名为“Setup.exe” 的文件,直接双击该文件便可启动安装过程。具体的安装指导请看“LambdaEDU 安装手册.doc”文件。 当 LambdaEDU 安装完毕之后,我们看到的是一个空的界面,现在就开始一步一步地将 我们的实验项目建立并运行起来。 2. 建立项目 为了我们的实验运行起来,需要建立1 个项目基于x86 虚拟机的标准应用项目。通过点 击“文件”、“新建”、“项目”开始根据向导创建一个项目。

在随后出现的对话框中选择“Tool/标准应用项目”,点击下一步,开始创建一个标准的可执行的应用程序项目。 在随后出现的对话框中填入项目名称“ucos_x86_demo”。点击“下一步”。

选择“pc386 uC/OS-II 应用(x86)”作为该项目的应用框架。点击“下一步” 选择“pc386_elf_tra_debug”作为该项目的基本配置。点击“完成”。

嵌入式学习之系统移植步骤

在线学习好工作https://www.doczj.com/doc/7d452536.html,/ 嵌入式学习之系统移植步骤 移植 下面我们就来看下一个内容叫做移植的基本步骤,也就是说我们要现有一个大体的思路,如果说我作为产品开发者,或者说是作为一个系统的整体架构来说,我们拿到一款板子过后我们是如何一步一步把我们的系统用起来呢?它整个系统流程又是什么样的,我们先要有个明确目标,第一个目标是我们要保证PC也就是我们的开发机器跟目标机也就是开发板或者说最终要做成产品的板子的硬件它们俩之间的连接方式。 因为我们在嵌入式开发中有一个很麻烦的事情就是开发板的能力跟PC的能力一般是不平等的,大家都知道PC的功能很强大也很贵而板子很便宜可能一个小系统一个路由器也就几十块钱,但是我们总不能在路由器上接个键盘接个鼠标然后装一个VC,在这里是不现实的,所以说我们一般的开发环境跟ARM讲的内容都是一样的,都是在主机上开发最终把主机编译好的内容跟我们的目标机进行一个数据传输,所以这就涉及到一个非常重要的问题。 数据传输的方式。因为我们数据无外乎就是高低电平这几种,那么传播有哪些传播方式呢?

如图,所以我们如果作为一个产品的研发者来说,你第一个需要考虑的就是我们是怎么连的。 那么给大家来列出了一下,目前来说,我们的PC跟我们的开发板的连接也就大概如上图四种比较常用的方式。第一种就是我们最经典90%的板子上,都支持的方式叫异部串行接口,也就是我们所说的串口。那么这个串口传输在我们之前学习ARM的时候也学习到过,其实别看它很简单,其实它的功能很强大。它既可以输入也可以输出,所以说我们基本上完成了一个输入输出这样数据出和进的功能。 所以说串口是我们比较常用的一个接口。但是它还是有它的特点就是它的速度比较低,因为比如说我们前面所配的速度是11520那这个其实是很低的,不是很高。因为他11520B比特也就是传多少位多少个高低电平的字节,所以说这个效率不是很高但是实用性比较强就几个接口就可以。 我们举个典型的例子就是家里的路由器,如果大家有兴趣,就把家里的老路由器拆下来看一下路由器里面一般都有3个架子或4个架子,3个小插针或4个小插针无外乎就几个电压,一个是D一个是电源很多情况下,路由器都会引出这个东西。如果你的动手能力比较强,你就去市场上买一个叫DB9的一个小头子,拿个烙铁把那里面的几根线给焊上去。然后就跟PC一接,就可能会看到路由器的一些打印信息。所以说串口在我们嵌入式开发中算是一个非常经典的跟PC之间通信的一个接口。 因为大家可以想一下,这个串口既可以输出我们可以把开发板上的信息往我们的平台上去看。甚至来说,我们还可以通过串口把PC里面的东西传到开发板中,所以他说输入输出都可以,这样的话串口也算是一个比较万能的接口,它唯一的缺陷就是速度太低,如果我们传输一些大数据比如说以后我们会看到的安卓中的一些东西,安卓中涉及到的其实跟我们所学的也是一样,他比较麻烦的就是文件系统支柱,文件系统少的可能就要几百兆,或者说压缩过后就是几十兆。那你可以想象一下,我们如果用11520去传,有的时候就要传送一二十分钟,这样很影响开发效率的。 所以说用串口如果是小文件没有关系,但大文件一般情况下用串口传输的可能性不大。如果说你的板子功能比较强,传的东西比较多,这种情况下用串口我们还是不建议。 那么现在我们就需要换一下,串口我们可以把它当作后备资源。 然后我们就要使用如上图所说的USB。随着USB的发展,从USB1.0到2.0、3.0,它的速度越来越快。那么这个传输数据我们就不用担心,它速度快是没有问题的,但是现在唯一比较担心的一个问题就是板子刚刚上电,就让他用串口去工作,这个是不现实的。所以这种情况下,我们还涉及到在开发板要把串口的驱动做好。所以说这个时候我们还要考虑驱动的问题,到底支不支持如果不支持或者开发的周期比较长,那么串口就不把它作为目标机和主机连接的主要方式了。以上就是我们的串口。

AD迁移实验手册server2003直接迁移到server2016

从server2003直接迁移AD至server2016 AD 目的:因公司AD服务器软件为server2003。硬件为赛扬+512M的物理机古迹配置。硬件升级势在必行。 一、环境介绍: 首先说明环境,实验环境比较简单。环境中已经有Windows server2003的域控。 新Server2016X64 试验用客户 XP win7 win10各一台 域名为https://www.doczj.com/doc/7d452536.html,

二、实验步骤 1、win2016加域https://www.doczj.com/doc/7d452536.html, 2、win2016加域重启,使用server2003域用户登录server2016

3在server2003的将自己的域用户添加至Domian Admins和Enterprise Admins组中。

3、在server2016上安装AD角色管理工具

安装用时的几分钟完成。 4、在server2003上提升将林架构(域和信任)和域架构(用户和计算机)的提升至windows server 2003级别(已经是2003级别的忽略次步) 5、安装完成之后,接要进行AD的扩展,这里注意的是win2003是32位系统,不能使用64位的命令执行域扩展命令,于是我将Windows Server2016的光盘加载到Win2016服务器上,并用命令定位到adprep目录下,将命令提示符转到D 盘的support/adprep目录,升级2003AD Schema林架构; 输入adprep.exe/forestprep(本步为不可逆操作,深夜忘记截图,借用网络server2012图片)

6、升级2003AD Schema域架构;adprep.exe/domainprep (本步为不可逆操作,深夜忘记截图,借用网络server2012图片) 7、更新组策略对象权限;adprep.exe/domainprep/gpprep(本步为不可逆操作,深夜忘记截图,借用网络server2012图片)

实验室综合管理系统学生使用手册

一用户登录 按“回车”键后即进入实验室管理系统地登录界面:,在浏览器地址栏中输入访问地址 系统登陆页图系统登陆界面 登陆本系统时,请选择“学生身份”,用户名为“自己地学号,初始密码为空”<为了确保系统安全,请学生第一次登录后即时修改密码,修改密码在修改密码栏进行操作),在登录界面输入了正确地用户名和密码后,点击“登录”按钮,点击“进入系统”就会进入主界面.b5E2RGbCAP

二详细操作说明 进入登录界面后,系统界面有三个模块:在线学习,实验预约,个人信息. 2.1 在线学习 2.1.1实验工程卡 学生点击“实验工程卡”打开所有实验工程列表,学生在这里可以查看到所有实验室开设地实验工程卡信息. 具体操作: 点击院系名称前地“”打开院系下所有实验室列表1)(点击实验室名称前地“”打开该实验室承担地所有实验工程列表(2)(3)双击实验工程名称则可以打开实验工程卡信息进行查看 2.1.2 实验指导书 . 已便于预习,学生在本模块中可以查找相关实验工程地指导资 料.

实验指导书地查看: (1)单击“指导书名称”,进入实验指导书窗体. (2)选择所要下载地实验指导书所在行,点击“全文”超级链接 (3)在弹出地窗体中显示实验指导书地具体内容. 实验指导书地下载: 选择所要下载地实验指导书所在行,单击后面地文档附件列中地“附件”即可查看和下载 2.1.3 在线交流 在线交流:学生对某一知识点或实验工程有疑点都可以在这里通过交流主题地形式发布出来,感兴趣地同学或者相关老师可以以“回贴”地形式进行交流,主题发布人或者老师可以对一些跟主题无关地内容进行删除.p1EanqFDPw

《嵌入式操作系统》实验报告

《嵌入式操作系统》实验报告 班级计算机 学号 姓名 指导教师庄旭菲

工业大学信息工程学院计算机系 2018年6月 实验一 Linux核移植与编译实验 1. 实验目的 ?了解Linux 核相关知识与核结构 ?了解Linux 核在ARM 设备上移植的基本步骤和方法 ?掌握Linux 核裁剪与定制的基本方法 2. 实验容 ?分析Linux 核的基本结构,了解Linux 核在ARM 设备上移植的一些基本步骤及常识。 ?学习Linux 核裁剪定制的基本配置方法,利用UP-Magic210 型设备配套Linux 核进行 自定义功能(如helloworld 显示)的添加,并重新编译核源码,生成核压缩文件zImage,下载到UP-Magic210 型设备中测试。 3. 实验步骤

实验目录:/UP-Magic210/SRC/kernel/linux-2.6.35.7/ 编译核:在宿主机端为UP-Magic210 设备的Linux 2.6.35.7 核编写简单的测试驱动(核)程序helloworld.c 并修改核目录中相关文件,添加对测试驱动程序的支持。 (1)、使用vim 编辑器手动编写实验代码helloworld.c helloworld.c 如如下: #include #include MODULE_LICENSE("Dual BSD/GPL"); //驱动程序入口函数 static int hello_init(void) { printk(KERN_ALERT "##############Hello, world############\n"); return 0; } //驱动程序出口函数 static void hello_exit(void) { printk(KERN_ALERT "###############Goodbye, world#########\n"); } module_init(hello_init); module_exit(hello_exit);

系统移植试验手册-2010-08-19(new)

嵌入式学院实验手册系统移植部分 嵌入式学院教材开发部编著 (内部资料,请勿外传) 嵌入式学院(2010)版权所有V3.0

目录 目录 (2) 实验一交叉工具链的移植 (3) 实验二 u-boot的烧写及使用 (8) 实验三 u-boot-2010.03的移植 (12) 实验四 linux-2.6.22.6内核的编译和配置 (31) 实验五 linux-2.6.35内核移植—网卡驱动的添加 (34) 实验六 linux-2.6.35内核移植—Nand flash驱动的添加 (36) 实验七 linux-2.6.35内核移植—LCD驱动的添加 (38) 实验八 linux-2.6.35内核移植—USB驱动的添加 (40) 实验九 linux-2.6.35内核移植—SD卡驱动的添加 (42) 实验十 linux-2.6.35内核移植—yaffs2文件系统的支持 (45) 实验十一内核调试 (47) 实验十二内存调试 (50) 实验十三文件系统的移植 (53) 实验十四 UDEV的移植 (58)

实验一交叉工具链的移植 【实验目的】 了解交叉工具链的编译过程及其使用。 说明:在本系统移植课程实验中命令行提示符“$”表示是在主机上执行,“#”表示在目标板执行 【实验环境】 1、Ubuntu 10.10发行版 2、FS2410平台 【实验步骤】 1、源码下载 Crosstools-ng下载地址 https://www.doczj.com/doc/7d452536.html,/download/crosstool-ng/ 同时对每一个版本都有相应的补丁我们尽量把这些补丁打上,这些补丁的下载地址是https://www.doczj.com/doc/7d452536.html,/download/crosstool-ng/01-fixes/ 我这里选用的是crosstool-ng-1.8.1.tar.bz2 并下载补丁 000-scripts_log_do_not_interpret_log_string_as_printf_format.patch 001-binutils_binutils_remove_faulty_patch.patch 002-kconfig_resync_curses_check_with_Linux_kernel.patch 2、工具的安装 在使用之前必须安装一些软件 $ sudo apt-get install gawk autotools-dev automake texinfo libtool cvs patch bison flex libncurses5-dev 3、必要目录的创建 /home/linux目录下,$mkdir s3c2410-2.6.35 $mkdir toolchain $ cd s3c2410-2.6.35 $mkdir toolchain $cd toolchain $ mkdir toolchain-build $ mkdir toolchain-install 把下列源码包复制到目录/home/linux/s3c2410-2.6.35/toolchain

胚胎实验室操作手册

附件6-01胚胎实验室操作手册第一节胚胎实验室每日工作流程

第二节胚胎实验室安全与质量控制 一、实验室安全与感染控制 实验室必须有完善的安全制度和防患措施,必须有关于火、电意外引起紧急情况时的应急方案,实验室人员必须了解灾情中的救援措施。为避免停电影响设备正常运转,应备有双重供电系统,或不间断电源(UPS),以确保二氧化碳培养箱和显微镜等关键设备在意外停 电时满足正常工作。 1.所有体液样本(精液、血液、卵泡液等)必须视同潜在污染源, 所有的供体组织和体液应有适当的传染病监测。 2.实验室工作人员应清楚乙肝疫苗的必要性并接受乙肝疫苗接种。 3.特别小心不要被那些受体液污染的仪器或设备意外损伤。 4.避免将体液溅到眼中。 5.当接触体液或盛放体液的容器时,应带一次性无粉橡胶或塑料手 套。离开实验室时,将手套脱下丢掉,决不可重复使用。 6.离开实验室时,脱掉实验室衣服,不能穿着出入公开场所或餐厅。 7.被体液沾染时,必须马上用消毒液或肥皂清洗。 8.接触配子和胚胎的耗材必须使用一次性用品。 9.因体液溢出污染实验室设备时,应在操作完成后用75%酒精消毒。 10.在实验室体液操作中必须使用机械抽吸装置,禁止用口吸。 11.所有操作步骤和体液处理应小心,尽量减少浮滴和烟雾生成。例 如离心时必须用带盖的试管。

12.实验室中严禁吃东西、吸烟等。 13.所有丢弃的体液和用后的一次性物品必须按污染物品处理。 二、实验室质量控制 (一)培养箱的质量控制 专人管理,每日确认以下各项内容并予以记录: 1.CO2的控制:6%±0.2%; 2.温度的控制:37℃±0.2℃; 3.湿度:大于80%RH,水盘内水的深度始终保持在大约1cm 以上。 培养箱内的水盘使用超纯水,根据不同培养箱要求定期更换,换水当天培养箱不放卵子或胚胎; 4.培养箱显示器温度与培养箱内温度计的温度应一致。不一致时应 及时调整校正。 5.消毒清洁:每隔3个月消毒培养箱。消毒时拆卸培养箱内所有钢 架,以75%酒精和超纯水分别擦拭消毒,再送高压消毒。培养箱内壁以75%酒精和超纯水分别擦拭。消毒清洁完成后,需开机运行稳定后方可使用。 (二)培养用气体的质量控制 1.使用有合法资格的气体供应厂家,气瓶使用前需检查是否有合格 证标签。 2.使用医用高纯度CO2(99.995%以上)培养胚胎。每天记录气瓶 的压力,定期检查气瓶有无漏气并更换培养箱外气体过滤器。

H3C-系统实验手册

H3C-系统实验手册

2016年南通市地税系统实验手册 目录 实验一:通过Telnet方式登录交换机典型配置举例 (3) 实验二:基于端口的VLAN典型配置举例 (5) 实验三:802.1X认证配置举例 (8) 实验四:网络地址转换配置举例 (13) 实验五:DHCP配置举例 (17) 实验六:静态路由 (19) 实验七:配置OSPF基本功能 (20)

实验一:通过Telnet方式登录交换机典型配置举例 组网图 配置步骤 (1)配置Device接口地址 #配置接口GigabitEthernet0/0地址为192.168.100.230/24。 system [Sysname] interface GigabitEthernet 0/0 [Sysname-GigabitEthernet0/0] ip address 192.168.100.230 24 [Sysname-GigabitEthernet0/0] quit (2)配置认证 #设置VTY的认证模式为scheme。[Sysname] line vty 0 15 [Sysname-line-vty0-15] authentication-mode scheme

[Sysname-line-vty0-15] quit #创建设备管理类本地用户admin。[Sysname] local-user admin #指定本地用户的授权用户角色为network-admin [Sysname-luser-manage-admin] authorization-attribute user-role network-admin #配置该本地用户的服务类型为Telnet。[Sysname-luser-manage-admin] service-type telnet #配置该本地用户密码为密文admin。[Sysname-luser-manage-admin] password simple admin [Sysname-luser-manage-admin] quit (3)开启Telnet服务 [Sysname] telnet server enable 验证配置 配置完成后,Host A 与Host B 能通过Telnet 登录设备 运行cmd->输入telnet 192.168.100.230->回车

实验六Linux内核移植实验

实验六Linux内核移植实验 一、实验目的 1. 掌握交叉编译环境的建立和使用; 2. 熟悉Linux 开发环境,掌握Linux 内核的配置和裁减; 3. 了解Linux 的启动过程。 二、实验环境 预装Fedora10的pc机一台,CVT-A8系列实验箱,以太网线一根,串口线一根。 三、实验步骤 1. Linux 内核移植 。在主机的Fedora10 操作系统下安装Linux 发行包以及交叉编译器。然后对Linux 进行配置(make menuconfig)并选择适合本实验系统的相关配置,配置完成后进行编译生成Linux 映像文件zImage。然后使用u-boot 将该内核镜像文件通过网络下载到目标板并执行。 2. Linux 内核源代码的安装 本实验系统的Linux 发行文件kernel-s5pv210.tar.gz,在Fedora 下将该文件拷贝到/opt/cvtech 目录下,然后在该目录下执行:tar zxvf kernel-s5pv210.tar.gz,当tar 程序运行完毕后,在/opt/cvtech 目录下会有一个kernel-s5pv210 的新目录,这个目录就是linux 的源码根目录,里面有进行linux 内核开发的所有的源代码。

3. Linux 交叉编译环境的建立和使用 4. Linux 内核的配置和编译 2) 配置和编译Linux 核心 1.配置内核: $cd /opt/cvtech/kernel-s5pv210 $make menuconfig 如下图所示, 在提示框中键入config-s5pv210-b4y2 配置文件名,然后选择“Ok”确认,将退回到主菜单。然后按“Esc”键退出,并将提示是否保存,请选择“Yes”保存。 2.编译:可以通过make 或者make zImage 进行编译,它们的差别在于make zImage将make 生成的核心进行压缩,并加入一段解压的启动代码,本实验采用make zImage 编译。 $make zImage

数据库管理与维护-实验手册

数据库管理与维护(SQL Server 2008) 鲍丽红 天水师范学院

目录 实验一SQL Server 2008安装 (1) 实验二数据库创建和管理 (2) 实验三数据库数据表的创建和管理 (3) 实验四数据库的数据查询 (5) 实验五Transact-SQL的编程实现 (8) 实验六数据库中视图的应用 (8) 实验七数据库中索引的应用 (10) 实验八存储过程的应用 (11) 实验九触发器的应用 (12) 实验十数据库安全性管理 (13) 实验十数据库的日常维护 (14) 实验十二自动化管理 (15) 参考文献 (16)

实验一SQL Server 2008安装 【实训目的】 1、了解安装SQL Server 2008 的硬件和软件的要求 2、掌握SQL Server 2008 的安装方法 3、掌握对象资源管理器与查询编辑器的使用 【实训内容】 1、在本地计算机上练习安装SQL Server2008 R2 Enterprise版本。 2、练习启动、暂停和关闭SQL Server2008的某一服务器。

实验二数据库创建和管理 【实训目的】 1、掌握数据库创建的方法 2、掌握数据库扩容和收缩的方法 3、掌握查看数据库信息方法 4、掌握数据库的分离和附加的方法 【实训内容】 1、创建了一个library数据库,该数据库的主数据文件逻辑名称为Library_data_1,物理文件名为Library_data_1.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Library_log,物理文件名为Library_log_1.ldf,初始大小为3MB,最大尺寸为5MB,增长速度为1MB。 2、对library数据库进行扩容,添加一个5 MB的数据文件library_data_2和一个5MB 的事务日志文件library_log_2。 3、对数据库library进行修改,将事务日志文件library_log_1的大小增加到15MB,将数据文件library_data_1和library_data_2分别增加到15MB和30MB。同时增加两个文件组group_1和group_2,分别包含一个数据文件,逻辑文件名library_data_3和library_data_4,物理文件名为library_data_3.ndf和library_data_4.ndf,初始大小都为15MB,最大尺寸为无限制,增长速度为15%,增加一个10MB事务日志文件library_log_3,最大尺寸无限制,增长速度为10%。 4、利用SQL Server Managerment Studio将library数据库名改为newlibrary。 5、利用sp_renamedb将newlibrary数据库名改为library。 6、创建数据库library的快照数据库library_snapshot 7、将library数据库文件移植到D:\data。 8、将D:\data的library数据库文件附加。。 9、将数据库library收缩30%,将library_log_3数据库文件收缩到8MB。 10、删除library数据库的日志文件library_log_3。 11、删除附加了D:\data数据库文件的library数据库。

Linux移植手册

LINUX移植手册for AT91 SAM9261

目录 一.交叉编译环境的建立 (2) 二. Linux内核下载编译 (2) 1.下载合适的linux内核,这里以2.6.27为例 (2) 2.下载针对AT91的linux补丁 (2) 3.配置编译linux 内核 (2) 4.修改Makefile (3) 5.make ARCH=arm oldconfig (3) 6. 编辑默认的配置 (3) 7. 修改nand flash 分区信息 (3) 8.编译内核 (4) 9.生成可烧写的映像文件 (4) 三.tftp文件传输软件的安装 (4) 1.下载tftp软件包tftp,tftpd和openbsd-inetd (5) 2.在跟目录下创建文件夹tftpboot 并且修改其权限。 (5) 3.修改/etc/inetd.conf文件如下样子 (5) 4.修改/etc/xinetd.d/tftp 如下样子(如果没有就创建) (5) 5.修改/etc/default/tftpd-hp文件如下(如果没有就创建) (5) 6.启动tftp服务 (5) 7.测试tftp服务 (6) 四.JFFS2根文件系统的制作 (6) 1.编译并生成根文件系统文件 (6) 2.准备制作jffs2文件系统的所有文件 (7) 3.制作jffs2文件系统 (8) 五. NFS根文件系统制作 (8) 1.选择交叉编译工具和busybox (8) 2配置busybox (9) 3建立根文件系统目录树 (9) 六.烧写开发板 (11) 1 烧写U-boot文件 (11) 2 烧写内核映像文件 (11) 3烧写根文件系统 (11) 4挂载基于nfs文件系统 (12)

相关主题
文本预览
相关文档 最新文档