当前位置:文档之家› u-boot-2011.12移植

u-boot-2011.12移植

u-boot-2011.12移植
u-boot-2011.12移植

第一步配置编译环境

1.1.下载源码

ftp://ftp.denx.de/pub/u-boot/

上面这个地址可以下载到最新的源代码,选择的是u-boot-2011.12.tar.bz2版本。

1.2.硬件环境

mini2440早期的版本

CPU:s3c2440

SDRAM:64MB

Nor Flash:2MB

Nand Flash:64MB

网卡:DM9000

1.3安装编译环境及解压源码并传回windows

tar -zxvf 解压arm-linux-gcc-4.3.2

gedit ~/.bashrc 最后一行增加export PATH=$PATH:/usr/local/arm/4.3.2/bin

重启虚拟机登入查看arm-linux-gcc -v 看是否变成了所安装的版本号

提示4.3.2说明安装生效了

解压tar -jxvf u-boot-2011.12.tar.bz2,并把源码考回到windows下面,在windows下改代码还是会舒服些。

1.4 删减u-boot 文件(可不做)

(1)删除arch 目录下除arm 目录以外的所有目录

(2)删除arm/cpu 目录下除arm920tmulu 以外的所有目录

(3)删除arch/arm/cpu/arm920t 目录下除s3c24x0 目录以外的所有目录(文件不要删)(4)删除arch/arm/include/asm 目录下除arch‐s3c24x0 外的所有arch‐xxxx 目录(文件不要删)

(5)删除board 目录下除samsung 目录以外的所有目录

(6)删除board/samsung 目录下除smdk2410 目录以外的所有目录

(7)删除include/configs 目录下除smdk2410.h 文件以外的所有头文件。

1.5.配置开发板

1.在“boards.cfg”中增加自己开发板选项。进入到u-boot-2011.12目录下,cd u-boot-2011.12,然后打开“boards.cfg”文件,在“smdk2410.....”那一行下增加自己开发板的一行“mimi2440 arm arm920t - kongan s3c24x0”。保存退出。

2.增加自己开发板的文件夹。进入到“/u-boot-2011.12/board/”目录下,增加自己开发板的文件夹,起名字为“kongan/mini2440”,将“smdk2410”文件下的所有文件拷贝到“mini2440”文件夹下,进入到mini2440文件夹下:cd mini2440,将“smdk2410.c”改名为“mini2440.c”,打开Makefile文件,将“COBJS:= smdk2410.o”改为“C OBJS := mini2440.o”。

3.增加自己开发板头文件。进入到“/u-boot-2011.12/include/configs”目录下,拷贝“smdk2410.h”并命名为“mini2440.h”。

4.退出到u-boot-2011.12的根目录下,“make distclean”,然后“make mini2440_config”,最后“make”,编译直接通过,得到“u-boot.bin”文件。

第二步修改代码在RAM中运行上面的几步只能保证编译通过,所有的代码都没有修改

U-boot启动过程主要是两个文件一个是/cpu/arm920t/start.s

另一个是board下面的一个C文件

需要修三个文件start.s mini2440.h mini2440.c

修改start.s文件

添加如下

# if define(CONFIG_S3C2440)

ldr r1,=0x7fff

ldr r0,=INTSUBMSK

str r1,[r0]

#endif

# if define(CONFIG_S3C2440)

#define MPLLCON 0x4C000004 //系统主频配置寄存器

#define UPLLCON 0x4C000008 //USB频率配置寄存器

#define CAMDIVN 0x4C000018

ldr r0,=CAMDIVN

mov r1,#0

str r1,[r0]

ldr r0,=CLKDIVN

ldr r1,=0x05

str r1,[r0]

/*设置为异步模式*/

mrc p15,0,r0,c1,c0,0

orr r0,r0,#0xc0000000

mcr p15,0,r0,c1,c0,0

ldr r0,=UPLLCON

ldr r1,=0x38022 /*0x38022*/

str r1,[r0]

nop /* Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.*/

nop

nop

nop

nop

nop

nop

ldr r0,=MPLLCON

ldr r1,=0x5c011 /*0x5c011*/

str r1,[r0]

# else

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

/* default FCLK is 120 MHz ! */

ldr r0, =CLKDIVN

mov r1, #3

str r1, [r0]

# endif

mini2440.h修改如下:

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

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

#define CONFIG_MINI2440

#define CONFIG_S3C2440

#define CONFIG_SKIP_LOWLEVEL_INIT

#define CONFIG_SYS_TEXT_BASE 0x33000000

//#define CONFIG_SYS_PROMPT "SMDK2410 # "

#define CONFIG_SYS_PROMPT "[MINI2440]# "

第212行“#define CONFIG_NAND_S3C2410”改为:

212:#define CONFIG_NAND_S3C2440

第213行“#define CONFIG_SYS_S3C2410_NAND_HWECC”改为:

213:#define CONFIG_SYS_S3C2440_NAND_HWECC

因为 CONFIG_S3C2410 修改成了CONFIG_S3C2440

为了编译通过所以需要

cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c

打开drivers/mtd/nand/s3c2440_nand.c文件,把该文件内的所有有关“2410”的地方一律改为“2440”。

再打开drivers/mtd/nand/Makefile文件

第48行“COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o”改为

48:COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

mini2440.c做如下修改:

#define FCLK_SPEED 2

#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

#elif FCLK_SPEED==2 /* Fout =400MHz */

#define M_MDIV 0x5C

#define M_PDIV 0x1

#define M_SDIV 0x1

#endif

#define USB_CLOCK 2

#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

#elif USB_CLOCK==2

#define U_M_MDIV 0x38

#define U_M_PDIV 0x2

#define U_M_SDIV 0x2

#endif

在int board_init(void)函数中修改

///* arch number of SMDK2410-Board */

//gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;

/* arch number of SMDK2410-Board */

gd->bd->bi_arch_number = MACH_TYPE_MINI2440;

串口打印

Flash: *** Failed ***,### ERROR ### Please RESET the board ###

第三步修改代码支持NOR FLASH

关于SST39LV1601 flash的一些特性:

重要需要了解的是,这款Nor flash兼容JEDEC接口方式,对于U-BOOT来说,如果直接定义成CFI接口方式的话,操作命令过程中,flash不能unlock。

FEATURES:

size:1M x 16bit

sector:2KWord / sector

block:32Kword / sector

Product identification

Software command sequence

调用关系:

flash_init() -->flash_detect_legacy(cfi_flash_bank_addr(i), i) 去探测目标板中是否存在nor flash芯片

static int flash_detect_legacy(phys_addr_t base, int banknum) -->flash_read_jedec_ids(info)获取JEDEC接口标准flash芯片的信息,并填充info->manufacturer_id和info->device_id

static int flash_detect_legacy(phys_addr_t base, int banknum) -->jedec_flash_match(info, info->start[0])去匹配获取到的id号是否与jedec_table中定义的成员匹配,如果匹配,继续填充flash_info的其他信息,并返回1表示detect成功。

需要修改三个文件lowlevel_init.s mini2440.h jedec_flash.c

修改内存SDRAM时序lowlevel_init.s

打开board/samsung/zhaocj2440/lowlevel_init.s文件

第54行至第126行的内容改为:

54:#define B1_BWSCON (DW16)

55:#define B2_BWSCON (DW16)

56:#define B3_BWSCON (DW16)

57:#define B4_BWSCON (DW32)

58:#define B5_BWSCON (DW16)

59:#define B6_BWSCON (DW32)

60:#define B7_BWSCON (DW32) 61:

62:/* BANK0CON */

63:#define B0_T acs 0x3 64:#define B0_T cos 0x3 65:#define B0_T acc 0x7 66:#define B0_T coh 0x3 67:#define B0_T ah 0x3 68:#define B0_T acp 0x1 69:#define B0_PMC 0x0 70:

71:/* BANK1CON */

72:#define B1_T acs 0x1 73:#define B1_T cos 0x1 74:#define B1_T acc 0x6 75:#define B1_T coh 0x1 76:#define B1_T ah 0x1 77:#define B1_T acp 0x0 78:#define B1_PMC 0x0 79:

80:#define B2_T acs 0x1 81:#define B2_T cos 0x1 82:#define B2_T acc 0x6 83:#define B2_T coh 0x1 84:#define B2_T ah 0x1 85:#define B2_T acp 0x0 86:#define B2_PMC 0x0 87:

88:#define B3_T acs 0x1 89:#define B3_T cos 0x1 90:#define B3_T acc 0x6 91:#define B3_T coh 0x1 92:#define B3_T ah 0x1 93:#define B3_T acp 0x0 94:#define B3_PMC 0x0 95:

96:#define B4_T acs 0x1 97:#define B4_T cos 0x1 98:#define B4_T acc 0x6 99:#define B4_T coh 0x1 100:#define B4_Tah 0x1 101:#define B4_Tacp 0x0 102:#define B4_PMC 0x0 103:

104:#define B5_Tacs 0x1

105:#define B5_Tcos 0x1

106:#define B5_Tacc 0x6

107:#define B5_Tcoh 0x1

108:#define B5_Tah 0x1

109:#define B5_Tacp 0x0

110:#define B5_PMC 0x0

111:

112:#define B6_MT 0x3

113:#define B6_Trcd 0x1

114:#define B6_SCAN 0x1

115:

116:#define B7_MT 0x3

117:#define B7_Trcd 0x1

118:#define B7_SCAN 0x1

119:

120:/* REFRESH parameter */

121:#define REFEN 0x1

122:#define TREFMD 0x0

123:#define Trp 0x1

124:#define Trc 0x1

125:#define Tchr 0x2

126:#define REFCNT 1268

修改mini2440.h

107: #define CONFIG_CMD_FLASH

188: #define CONFIG_SYS_FLASH_LEGACY_1024Kx16

193: #define CONFIG_SYS_MAX_FLASH_SECT (512)

195: #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x1f0000) 修改jedec_flash.c

第350行加入

#ifdef CONFIG_SYS_FLASH_LEGACY_1024Kx16

{

.mfr_id = (u16)SST_MANUFACT,

.dev_id = SST39VF1601,

.name = "SST 39VF1601",

.uaddr = {

[1] = MTD_UADDR_0x5555_0x2AAA /* x8 */

},

.DevSize = SIZE_2MiB,

.CmdSet = P_ID_AMD_STD,

.NumEraseRegions= 4,

.regions = {

ERASEINFO(0x10000,6),

ERASEINFO(0x10000,10),

ERASEINFO(0x10000,15),

ERASEINFO(0x10000,1),

}

},

#endif

共分了4个区域,第一个区域有6个sectors,每个sectors大小为0x10000(也就是刚好SST39LV1601一个block的大小),这样,u-boot在擦除操作的时候,擦除的最小单位就是一个block了。这里定义第一个区域为6,是因为一般这个区域放u-boot映像文件,最后一个区域为1block是因为这个区域我们计划用来放置环境变量。

用已经移植好的u-boot或其他程序对S3C2440初始化,通过Jlink将编译后的程序下载到内存中运行

将mini2440.h中的

#define CONFIG_SKIP_LOWLEVEL_INIT

#define CONFIG_SYS_TEXT_BASE 0x33000000

修改成

// #define CONFIG_SKIP_LOWLEVEL_INIT

#define CONFIG_SYS_TEXT_BASE 0x0

就可以从NOR FLASH启动了

第四步修改代码支持NAND FLASH 1.支持NAND FLASH

需修改s3c2440_nand.c

修改27-37

#define S3C2440_NFCONF_EN (1<<15)

#define S3C2440_NFCONF_512BYTE (1<<14)

#define S3C2440_NFCONF_4STEP (1<<13)

#define S3C2440_NFCONF_INITECC (1<<12)

#define S3C2440_NFCONF_nFCE (1<<11)

#define S3C2440_NFCONF_TACLS(x) ((x)<<8)

#define S3C2440_NFCONF_TWRPH0(x) ((x)<<4)

#define S3C2440_NFCONF_TWRPH1(x) ((x)<<0)

#define S3C2440_ADDR_NALE 4

#define S3C2440_ADDR_NCLE 8

#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_NFCONF_TACLS(x) ((x)<<12)

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

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

#define S3C2440_ADDR_NALE 0x08

#define S3C2440_ADDR_NCLE 0x0c

以下在static void s3c2440_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)中修改在70行加入

if(cmd ==NAND_CMD_NONE)

IO_ADDR_W = &nand->nfdata;

修改75-80行

if (ctrl & NAND_NCE)

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

&nand->nfconf);

else

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

&nand->nfconf);

以下在int board_nand_init(struct nand_chip *nand)中修改

154-158

#else

tacls = 0;

twrph0 = 3;

twrph1 = 1;

#endif

cfg = S3C2440_NFCONF_TACLS(tacls - 1);

cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);

cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);

writel(cfg, &nand_reg->nfconf);

cfg = S3C2440_NFCONT_SECCL;

cfg |= S3C2440_NFCONT_MECCL;

cfg |= S3C2440_NFCONT_MODE;

writel(cfg,&nand_reg->nfcont);

操作nand好多命令都提示raise: Signal # 8 caught

2.去掉“raise: Signal # 8 caught”

其实把这个bug去掉也很简单,就是把time.c(在arch/arm/arm920t/s3c24x0目录下)这个文件中的四个全局变量用gd这个数据结构中的4个相关成员代替就可以了,具体的就是:用替换功能

timer_load_val用gd->timer_rate_hz替代;

timer_clk用gd->tbl替代;

timestamp用gd->timer_reset_value替代;

lastdec用gd->lastinc替代。

去掉第38行和第39行关于timer_load_val和timer_clk这两个变量的声明,并加上下面代码:38:DECLARE_GLOBAL_DA TA_PTR;

去掉第49行和第50行关于timestamp和lastdec这两个变量的声明;

去掉第60行至第68行语句(if (timer_load_val == 0)的判断内容),改为:

60:gd->timer_rate_hz = get_PCLK() /(2*16*100);

61:gd->tbl = get_PCLK() / (2 * 16);

3.加入硬件ECC

我们很好地完成了u-boot对NandFlash的读写,但这个读写进行的是软件ECC,即用软件编程的方法实现ECC。我们知道S3C2440的NandFlash控制器是支持硬件ECC的,因此在这里我们就来讲解如何实现硬件ECC。

NandFlash的每一页分为main区和spare区,S3C2440的NandFlash控制器支持这两个区的硬件ECC,但为了兼容u-boot-2011.06,我们只实现main区的硬件ECC。

为了实现硬件ECC,首先需要在include/configs/mini2440.h文件内定义宏CONFIG_S3C2440_NAND_HWECC,这样在drivers/mtd/nand/s3c2440_nand.c文件内就定义了硬件ECC所需要的三个函数:s3c2440_nand_enable_hwecc函数、s3c2440_nand_calculate_ecc函数和s3c2440_nand_correct_data函数,而且在board_nand_init 函数内,又把这三个函数分别赋给了相对应的结构体的三个成员,这样在进行NandFlash读写时,就会调用这三个函数,从而实现了硬件ECC。s3c2440_nand_enable_hwecc函数负责使能硬件ECC,s3c2440_nand_calculate_ecc函数负责计算ECC(当然这种计算是由硬件来完成的),s3c2440_nand_correct_data函数负责进行ECC的校验(同样地,这种校验也是由硬件自动完成的)。

为了理解u-boot是如何进行硬件ECC的,我们先来简要地分析一下相关的函数。NandFlash是以页为最小单位进行读写操作的,支持硬件ECC的读操作最终是由nand_read_page_hwecc函数(在drivers/mtd/nand目录下)来完成的,支持硬件ECC的写操作最终是由nand_write_page_hwecc函数(在drivers/mtd/nand目录下)来完成的。nand_read_page_hwecc函数的流程为先读取main区数据,同时通过调用s3c2440_nand_calculate_ecc函数来得到硬件ECC;再读取spare区数据;然后提取出储存在spare区内的main区ECC;最后通过调用s3c2440_nand_correct_data函数来对刚刚读取的main区数据进行校验。nand_write_page_hwecc函数的流程比较简单,它先写入main区数据,同时通过调用s3c2440_nand_calculate_ecc函数来得到硬件ECC;然后就是把硬件ECC写入到spare区内。

无论是nand_write_page_hwecc函数,还是nand_write_page_hwecc函数,内部都有一个这样的for循环体:

for(i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {

…………

}

其中三个主要变量的定义为:

eccsize= chip->ecc.size;

eccbytes= chip->ecc.bytes;

eccsteps= chip->ecc.steps;

下面我们就来介绍一下这个循环的作用:不同的CPU的NandFlash控制器一次所能完成的硬件ECC的字节数是不一样的,例如有些CPU一次只能完成512字节的硬件ECC,但如果开发板上的NandFlash每页有2048个字节,那该怎么办呢?这时就要用到一个循环体,通过循环多次来得到一页的硬件ECC。例如上面这种情况,就要循环4次(2048÷512=4),才能得到这个页内数据完整的硬件ECC。另外每一次硬件ECC,不同的CPU所生成的ECC字节数也是不同的,有的是3个字节,有的是4个字节。

那么,上面那三个变量的含义就分别为:

ecc.size:每一次硬件ECC所检验的字节个数

ecc.bytes:每一次硬件ECC所生成的字节个数

ecc.steps:每一页需要进行硬件ECC的次数

对于S3C2440来说,一次硬件ECC可以检验2048个字节,并且生成4个字节的ECC,因此ecc.size应该为2048,ecc.bytes应该为4。而ecc.steps是通过计算得到的,即系统上电后能够获知NandFlash的每页的大小,用这个值除以ecc.size就等于ecc.steps。所以对于这三个参数,只需事先定义好前两个参数即可。而这两个参数是在drivers/mtd/nand/s3c2440_nand.c文件中的board_nand_init函数内被定义赋值的,即:

nand->ecc.size = 2048;

nand->ecc.bytes = 4;

u-boot-2011.12对S3C2440的NandFlash控制器的寄存器定义得不完整,而且有错误,因此我们还需要对此进行修改。删除arch/arm/include/asm/arch-s3c24x0/s3c24x0.h文件内的第167行至第178行内容,添加进下面的内容:

struct s3c2440_nand {

u32 nfconf;

u32 nfcont;

u32 nfcmd;

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;

};

对s3c2440_nand_enable_hwecc函数、s3c2440_nand_calculate_ecc函数和s3c2440_nand_correct_data函数进行修改。

void s3c2440_nand_enable_hwecc(struct mtd_info *mtd, int mode)

{

struct s3c2440_nand *nand = s3c2440_get_base_nand();

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

writel(readl(&nand->nfcont)|S3C2440_NFCONT_INITECC&

~S3C2440_NFCONT_MECCL, &nand->nfcont);

}

该函数的任务就是初始化ECC(即复位ECC),并解锁main区ECC。

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();

u32 mecc0;

writel(readl(&nand->nfcont)| S3C2440_NFCONT_MECCL,&nand->nfcont);

mecc0= readl(&nand->nfmecc0);

ecc_code[0] = mecc0&0xff;

ecc_code[1] = (mecc0 >> 8) &0xff;

ecc_code[2] = (mecc0 >> 16) &0xff;

ecc_code[3] = (mecc0 >> 24) &0xff;

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

return 0;

}

该函数首先锁定main区ECC,然后读取寄存器NFMECC0,该寄存器存放着由硬件生成的main区ECC,最后把4个1字节的ECC存放到ecc_code数组内。

static int s3c2440_nand_correct_data(struct mtd_info *mtd, u_char *dat,

u_char *read_ecc, u_char *calc_ecc)

{

struct s3c2440_nand *nand = s3c2440_get_base_nand();

u32 meccdata0, meccdata1, estat0, err_byte_addr;

int ret = -1;

u8 repaired;

meccdata0= (read_ecc[1] << 16) | read_ecc[0];

meccdata1= (read_ecc[3] << 16) | read_ecc[2];

writel(meccdata0,&nand->nfmeccd0);

writel(meccdata1,&nand->nfmeccd1);

estat0= readl(&nand->nfestat0);

switch(estat0 & 0x3)

{

case 0: /* No error */

ret=0;

break;

case 1:

err_byte_addr= (estat0 >> 7) & 0x7ff;

repaired= dat[err_byte_addr] ^ (1 << ((estat0 >> 4) & 0x7));

printf("S3C NAND: 1 bit error detected at byte%ld. "

"Correcting from 0x%02x to0x%02x...OK\n",

err_byte_addr, dat[err_byte_addr],repaired);

dat[err_byte_addr]= repaired;

ret=1;

break;

case 2: /* Multiple error */

case 3: /* ECC area error */

printf("S3C NAND: ECC uncorrectable errordetected. Not correctable.\n");

ret=-1;

break;

}

return ret;

}

该函数首先把read_ecc数组内的ECC存入寄存器NFMECCD0和寄存器NFMECCD1中,这样系统就会自动校验数据,并把状态放入寄存器NFESTAT0中,然后读取该寄存器的后4位,当为0时表示校验正确;当为1时表示发生了1位错误(该类错误可以校正),我们把它校正过来;当为2和3时表示发生其他类型的错误,这类错误是无法校正的。

在mini244.h中加入

#define CONFIG_MTD_NAND_VERIFY_WRITE

#define CONFIG_S3C2440_NAND_HWECC

#define CONFIG_SYS_NAND_ECCSIZE 2048

#define CONFIG_SYS_NAND_ECCBYTES 4

通过以上内容的修改,我们就实现了NandFlash的硬件ECC。

ECC足以保证所读数据的正确性,并在有些情况下还可以修正错误,但它不能保证所写数据的正确性。为了保证所写数据的正确性,u-boot还可以通过在include/configs/mini2440.h 文件内定义宏CONFIG_MTD_NAND_VERIFY_WRITE来实现把所写的数据再读取一遍,然后与被写入的数据之间进行比较来判断所写数据的正确性,这一过程是在drivers/mtd/nand/nand_base.c文件的nand_write_page函数内调用实现的。

下载到内存串口提示:

NAND: 2048 byte HW ECC not possible on 512 byte page size, fallback to SW ECC

读写正常。

第五步修改代码支持DM9000

u-boot默认的网络芯片是CS8900,但开发板上的网络芯片是DM9000,所以为了使用网络功能,就必须进行移植。好在u-boot有DM9000的驱动程序,我们只需要把关于CS8900的部分换成DM9000的部分即可。

首先在include/configs/mini2440.h文件内注释掉下列语句:

#define CONFIG_CS8900 /* we have a CS8900 on-board */

#define CONFIG_CS8900_BASE 0x19000300

#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses asshorts */

再添加下列语句:

#define CONFIG_DRIVER_DM9000

#define CONFIG_DM9000_NO_SROM

#define CONFIG_DM9000_BASE 0x20000300

#define DM9000_IO CONFIG_DM9000_BASE

#define DM9000_DA TA (CONFIG_DM9000_BASE + 4)

然后定义缺省的环境变量,先添加MAC地址,再修改开发板以及宿主机的IP地址:

#define CONFIG_ETHADDR 00:01:02:03:04:05

#define CONFIG_NETMASK 255.255.255.0

#define CONFIG_IPADDR 192.168.1.300

#define CONFIG_SERVERIP 192.168.1.123

#define CONFIG_GATEW AYIP 192.168.1.1

环境变量的设置也可以通过u-boot的setenv命令来完成。

在110行加入#define CONFIG_CMD_NET

最后修改board/kongan/mini2440/mini2440.c文件中的board_eth_init函数:

int board_eth_init(bd_t *bis)

{

intrc = 0;

#ifdef CONFIG_DRIVER_DM9000

rc= dm9000_initialize(bis);

#endif

returnrc;

}

完成上述步骤,开发板就能正常的使用网络功能了。

下载到内存运行

U-Boot 2011.12 (Mar 23 2012 - 19:37:36)

DRAM: 64 MiB

WARNING: Caches not enabled

Flash: 2 MiB

NAND: 2048 byte HW ECC not possible on 512 byte page size, fallback to SW ECC

64 MiB

*** Warning - bad CRC, using default environment

In: serial

Out: serial

Err: serial

Net: dm9000

[MINI2440]# ping 192.168.1.123

dm9000 i/o: 0x20000300, id: 0x90000a46

DM9000: running in 16 bit mode

MAC: 00:01:02:03:04:05

could not establish link

Using dm9000 device

host 192.168.1.123 is alive

当看到最后一行“host192.168.1.125 is alive”时,说明网络功能已能正常使用。如果为了去掉“could not establish link”字样,并加快运行速度,可以注释掉drivers/net/dm9000x.c文件中的dm9000_init函数内的下面语句:

i= 0;

while(!(dm9000_phy_read(1) & 0x20)) { /*autonegation complete bit */

udelay(1000);

i++;

if(i == 10000) {

printf("couldnot establish link\n");

return0;

}

}

/*see what we've got */

lnk= dm9000_phy_read(17) >> 12;

printf("operatingat ");

switch(lnk) {

case1:

printf("10M half duplex ");

break;

case2:

printf("10M full duplex ");

break;

case4:

printf("100M half duplex ");

break;

case8:

printf("100M full duplex ");

break;

default:

printf("unknown:%d ", lnk);

break;

}

U-Boot 2011.12 (Mar 23 2012 - 21:59:38)

DRAM: 64 MiB

WARNING: Caches not enabled

Flash: 2 MiB

NAND: 2048 byte HW ECC not possible on 512 byte page size, fallback to SW ECC 64 MiB

*** Warning - bad CRC, using default environment

In: serial

Out: serial

Err: serial

Net: dm9000

[MINI2440]# ping 192.168.1.123

dm9000 i/o: 0x20000300, id: 0x90000a46

DM9000: running in 16 bit mode

MAC: 00:01:02:03:04:05

Using dm9000 device

host 192.168.1.123 is alive

[MINI2440]# tftp 31000000 u-boot.bin

dm9000 i/o: 0x20000300, id: 0x90000a46

DM9000: running in 16 bit mode

MAC: 00:01:02:03:04:05

Using dm9000 device

TFTP from server 192.168.1.123; our IP address is 192.168.1.44

Filename 'u-boot.bin'.

Load address: 0x31000000

Loading: T ##################

done

Bytes transferred = 257244 (3ecdc hex)

第六步修改代码支持串口xmodem协议

在common/cmd_load.c 中修改

依照loady的实现来编写代码,首先使用U_BOOT_CMD宏来增加loadx命令U_BOOT_CMD(

loadx, 3, 0, do_load_serial_bin,

"load binary file over serial line (xmodem mode)",

"[ off ] [ baud ]\n"

" - load binary file over serial line"

" with offset 'off' and baudrate 'baud'"

);

其次在do_load_serial_bin 函数中增加对loadx 命令的处理分支

if (strcmp(argv[0],"loadx")==0) {

printf ("## Ready for binary (xmodem) download "

"to 0x%08lX at %d bps...\n",

offset,

load_baudrate);

addr = load_serial_xmodem (offset);

}

else if (strcmp(argv[0],"loady")==0) {

printf ("## Ready for binary (ymodem) download "

"to 0x%08lX at %d bps...\n",

复制load_serial_ymodem 为load_serial_xmodem函数

将char ymodemBuf[1024]; 修改成char xmodemBuf[1024]; 替换函数中的全部

将info.mode = xyzModem_ymodem; 修改成info.mode = xyzModem_xmodem;

在36行增加函数声明

#if defined(CONFIG_CMD_LOADB)

static ulong load_serial_xmodem (ulong offset);

static ulong load_serial_ymodem (ulong offset);

#endif

编译,下载,运行,就可以使用loadx 命令了。

loadx - load binary file over serial line (xmodem mode)

关于-大桂花树移栽技术的总结

关于大桂花树移栽技术的总结 桂花喜温暖,抗逆性强,既耐高温,也较耐寒。桂花较喜,亦能耐阴,在全光照下其枝叶生长茂盛,开花繁密,在阴处生长枝叶稀疏、花稀少。桂花性好湿润,切忌积水,但也有一定的耐干旱能力。桂花对土壤的要求不太严,除碱性土和低洼地或过于粘重、排水不畅的土壤外,一般均可生长,但以土层深厚、疏松肥沃、排水良好的微酸性砂质壤土最为适宜。桂花对氯气、二氧化硫、氟化氢等有害气体都有一定的抗性,还有较强的吸滞粉尘的能力,常被用于城市及工矿区。 桂花适宜栽植在通风透光的地方;喜欢洁净通风的环境,不耐烟尘危害,受害后往往不能开花;畏淹涝积水,若遇涝渍危害,则根系发黑腐烂,叶片先是叶尖焦枯,随后全叶枯黄脱落,进而导致全株死亡;不很耐寒,但相对其它常绿阔叶树种,还是一个比较耐寒的树种。 一、移栽季节 移栽大桂花树的时间应选择在初春或深秋,最好无风雨,光照不强烈,挖掘时土壤的干湿度适中,结球强度最大,避免过干或过湿而导致土球散落,经过摸索南方以初春为好,此时树干处于休眠状态,移植后不久活动力较强,易成活。忌夏季移栽,气

温高,蒸腾量大,根系易受损,吸收水分的能力被消弱,往往造成落叶甚至枯死。 但对于夏季移栽时特别注意事项: 夏季移栽大桂花树栽植时定根水一定要浇透,尽量保护好土球的完整性,栽植后每天早晚都要进行浇叶片水或喷洒蒸腾抑制剂,一定要盖上遮阳网,防止高温树体水分流失不利于大树成活。二、桂花树选择 要选择树形饱满、枝叶茂盛、无病虫害容易起挖吊运的桂花树 三、移栽前的工作准备 看地形是否易积水,挖树坑直径要比移栽树的包装直径大1米左右高度与移栽包装高度水平即可,挖出的夹层土和下层土分开放置,把土摊开晒凉同时将土中的砖头、瓦片等杂质清理干净,有条件的可使用多菌灵、托布津与生根粉对刚栽植大树土球进行浇灌。 四、整形修剪 修剪主要注意以下方面,截枝,截枝有利于降低树的养分消耗量和水分蒸腾量,上百年的老树因生长势弱要少留枝或不留枝。在截枝时先要除去病虫枝,徒长枝和交叉枝。之后用凡士林或伤口涂补剂涂补伤口,并用朔料袋捆扎伤口,以避免病虫危害和雨水侵蚀。 五、栽植后期管理

minigui1.33在uclinux移植过程

Minigui V1.3.3在uClinux中的移植经验总结 [转] 经过一个星期的努力,终于将Minigui移植到我的ARM7开发板上了,在这个过程中我遇到了很多困难和问题网络,通过以前很多前辈在网络上分享的经验,终于取得成功,也让我更加体会到只有大家都互相帮助,才能使大家都受益。所以基于这一点,我将我的移植过程分享给大家,并且写得尽量详细点,希望给大家后来者少走一些弯路。有不对的地方,欢迎大家板砖! 首先说明一下我的开发平台,我用的是Samsung S3C44B0X芯片的开发板,已经移植好的uClinux操作系FrameBuffer驱动。我的uClinux安装在"/s3c44b0fu/uClinux-dist"目录下,交叉编译工具安装在"/usr/local/a 下。 具体步骤: 一. 从网站下载 libminigui-1.3.3.tar.gz, mde-1.3.0.tar.gz, mg-samples-1.3.0.tar.gz和minigui-res-1.3.3.tar.g 件,并将这四个文件保存到交叉编译环境的目录下,因为我的arm-elf-gcc交叉编译工具安装在"/usr/local/arm-以将minigui的四个压缩包同样拷贝到"/usr/local/arm-elf"目录下. 二. 在终端中输入"cd /usr/local/arm-elf",进入minigui的四个压缩文件所在目录,然后分别执行"tar zxvf xxxx 四个压缩包解压缩.解压后生成libminigui-1.3.3, mde-1.3.0, mg-samples-1.3.0和minigui-res-1.3.3四个文件 三. 1) 进入minigui-res-1.3.3文件夹内,修改config.linux,在prefix = $(TOPDIR)/usr/local/后添加我们的交叉arm-elf,即prefix = $(TOPDIR)/usr/local/arm-elf. 2) cd minigui-res-1.3.3 3) make install 四. cd mde-1.3.0 ./configure make cd mg-samples-1.3.0 ./configure make 五. 1) 编写交叉编译minigui函数库的配置脚本domain.sh. domain.sh的具体内容为: #!/bin/sh rm config.cache config.status -f CC=arm-elf-gcc \ CFLAGS="-I/s3c44b0fu/uClinux-dist/uClibc/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \ LDFLAGS="-Wl,-elf2flt -static -Wl,-move-rodata -Wl,-L/s3c44b0fu/uClinux-dist/lib/uClibc/lib -Wl,-L/s3c44b dist/linux-2.4.x/lib -Wl,-lc -Wl,-lm" \ ./configure --prefix=/usr/local/arm-elf \ --build=i686-pc-linux-gnu \ --host=arm-elf-linux \

将驱动移植到64位Windows操作系统

将驱动移植到64位Windows操作系统 x64位操作系统和x32位操作系统的最大区别就是内存寻址方式的不同。而64位操作系统不支持32位的驱动程序,因为驱动程序和windows内核同处于一个地址空间中。这是移植32位驱动到64位驱动的最大原因。当然,64位驱动程序可以使用更大的分页内存,非分页内存及系统缓存。而且,你的设备从此就支持64位windows操作系统了。 1.在X64下的驱动程序安装 除了要把应用程序的32位驱动程序变成64位程序之外,驱动的安装程序和其它配置文件同样需要修改。也就是说,对于要在x64上运行的32位程序,它所依赖的驱动仍然需要是64位的。这些相关程序包括inf文件,device installers, class installers和co-installers。相关资料可查看MSDN Libarary DDK:Porting Your Driver to 64-Bit Windows。 所以,要改造应用程序的安装程序。方法是,让32位版的驱动安装为缺省安装选项,即用户插入安装光盘之后,依然运行32位安装程序。但当程序调用UpdateDriverForPlugAndPlayDevices返回值为ERROR_IN_WOW64时,这说明该安装程序正运行在64位Windows环境中。此时,这个安装程序应该调用CreateProcess函数来启动64位的安装进程。这个64位的安装进程通过调用64位驱动目录下的inf文件进行驱动安装。 2.驱动要支持32位IOCTL 某些IOCTL可能包含含有指针的结构,所以,要特别小心的区别对待它,必须根据被调用者解析结构或者输出结构。 有三种办法可以解决这个问题: 1.尽量避免使用IOCTL传递包含有指针的结构; 2.通过API IoIs32bitProcess()来判断上层调用者的程序类型; 3.在64位程序中采用新的IOCTL命令; 例子: IOCTL structure in header file typedef struct _IOCTL_PARAMETERS {

古树移植的方法_王会芳

林 业 科 技农业开发与装备 2013年第5期 古树是指生长超过一百年的树,因其稀有珍贵,景观效果好,因而备受青睐。 古树移植存在很大风险,包括生长环境,气候条件,经纬度,适应区域、适应性等,其次才是移植技巧。据报导,重庆的张飞庙因遗址搬迁,所移植古树90%死亡;河南荥阳京襄城遗址移入千株古树,部分死亡,其中有2株价值300万元的大桂花树,也难逃死亡厄运;合肥蜀山苗木精品园从越南引进98株百岁紫薇树,株价40万元,集体死亡;2011年南京市为修地铁,移植的3000株70年树龄的梧桐树,死亡八成以上。就连城市绿化街道两旁移植的大树,死亡率也在17.6%以上。在这里,我们不讨论古树移植的对与错,只是结合日常工作经验,将古树移植的一些常用方法拿出来与大家一同分享,为提高古树移植的成活率做一些粗浅的探讨。 1 移植前修枝 在古树移植前,最好是在新芽萌发前的休眠期进行修枝。考虑景观效果,一般将枯枝和5cm以下的枝干修去,将过密枝和树干上的裙枝进行适当处理。修剪后的枝干切口用羊脂等愈合剂涂抹,促进伤口的迅速愈合,如果是在生长期进行移栽,则伤口要涂抹防腐剂,以防感染。 2 对树干进行整理 古树由于生长年代较长,容易有空洞,生病局部腐烂现象,在移植前需进行处理。 2.1 空洞的处理 清除洞内污垢,用稀释多菌灵、磷酸二氢钾加少量尿素对树干树洞喷雾至表皮湿润为止。洞口填砌水泥或石灰,外抹麻刀灰。用草绳进行围扎,对草绳进行喷雾湿润后用塑料膜进行包扎。 2.2 局部生虫腐烂的处理 将腐烂部位掏净,喷入防腐剂,填充水泥,与边缘吻合严密后,在边缘处再喷洒防雾剂。用草绳进行围扎,对草绳进行喷雾湿润后用塑料薄膜包扎。 3 挖土球前的处理 用钢管对树身进行加固,防止树身折断和倾斜。对树木进行编号和定向,在树干标定南北方向,使其栽移后仍能保持原方位,以满足对避荫及阳光的需求。如果下部有影响施工的树枝,要用草绳绑缚起来。准备起挖前还要对树冠适量均匀喷洒,抗蒸腾剂,要重点喷到叶子的背面,因为叶子的气孔主要集中在背面。常用的比较有效的蒸腾剂由日本生产的固林纳、新固林纳、OED、抗旱剂等。如果起挖前土壤比较干燥,还应提前3d灌水及保证根部土壤湿润。 4 挖土球 首先要确定土球的大小,以树干为中心,根据土球直径划圈线,以确定挖土范围。土球的直径约是树干胸径的7~10倍,胸径1m以上的大树,土球直径应是6m以上。土球形状为苹果形,底径约是上径的1/3,土球横径、纵径比为5:4,这样可以保证移植时不致伤害过多的根系而缩短缓苗时间。 其次,挖球前先铲去土球上部浮土,再沿圈线向外挖环状沟,胸径1m以上的大树,环状沟内环直径应在8m以上,外环直径14m以上,使修理土球时有较大操作平面。当挖到规定土球高度后,逐渐将土球底部的土掏去,切忌将土球底部掏空,以防树身倾斜,损坏土球。土球要边挖边修整,最后呈苹果形。挖掘用的铲、镐要锋利,保证断面平整。 5 土球包扎成型 古树由于胸径较大,土球也较大,周围生长环境也较为复杂,所以在挖土球时要采取单边支撑开挖,边挖边修,边挖边包。挖断的根要及时剪齐,并涂抹防腐剂,然后进行包扎.一般采用螺旋式纵向双层缠绕法,如果是沙土等疏松性土质,应先用蒲包或麻袋片盖严,然后包扎。包扎要2至3人配合,用草绳包扎,常用的方式有橘子式、井子式、五角式等。井子式的包扎方法:先缠腰绳,然后把草绳拴在树干基部按顺时针方向斜向下将草绳拉紧,通过土球底部呈180°,从另一侧拉出草绳回到树干基部,再缠第二圈,直至缠满为止。草绳排列要紧密,如果土质疏松,应缠两遍。土球缠完后,绕树干缠几圈,高约30~50cm,防止装卸时捆绑处树皮损伤,然后用水喷湿草绳,以增加其柔韧性。 6 吊装运输 运输要迅速快捷,宜选择阴天或夜间进行,一般采用起重机吊装、平板车运输,树木装进平板车时,要使树冠向着车尾,根部土块靠近司机室。树干包上柔软材料放在木架上,用软绳扎紧,树冠也要用软绳适当缠绕,土块下垫模板,然后用木板将土块夹住。无论是装、运、卸时都要保证不损伤树干和树冠以及根部土块。 7 定植 古树运到后,应迅速定植于事先挖好的树穴内。挖树穴可与挖土球同时进行。树穴应比土球规格大20~30cm。挖穴时表土和底土分开放置,土质不好的还要换成有肥力的园土,有砖头、白灰等建筑垃圾的,一定要清除干净。 将古树从车上轻轻斜吊于定植穴内,移动和调整树冠方位,使古树符合原来的朝向,然后摆正树身,去除包装物,用根腐灵拌细土撒施在土球上进行消毒,然后向土球喷洒稀释50倍的大树生根液。常用的生根液有爱多收(单硝化愈创木酚钠)、天丰素、植物动力21303、中威生根机密、多多收等。但是在应用时只能选取1种,不能混用。 填土时土球周围回填沙子,形成一个环状的透气带,然后回填表土,可适当施入一些腐熟的有机肥,分层踩实。填好后绕树做一圆形的围堰,踩实。 8 栽植后养护 1)支撑树干。用三根木柱呈等边三角形支撑树身,支撑点要略高一些,杆与地面成60~70°夹角为宜。支撑要牢固,待古树成活,根系恢复好方可拆除。 2)裹干。用浸湿的草绳从树干基部密密缠绕至树干顶部,再将调制的粘土泥浆糊满草绳,以后每天早晚各喷水一次。 古树移植的方法 王会芳1,张龙辉1,魏新田2* (1.河南省镇平县园林绿化管理处; 2.镇平县农技中心,河南镇平 474250) *通讯作者。(下转第106页) ·111·

Minigui在ARM开发板上的移植过程

Minigui在ARM开发板上的移植过程 一、题外话: 为了感谢国人在开源世界颇具影响力的为数不多Minigui的开发者们的辛勤劳动(希望为数不多这个这个词若干年后我们不再提^_^),也为答谢飞漫公司和魏永明先生对开源项目在中国的运作模式的有意义的探索, 也为自己在感慨、敬佩之余尽一点微波之力,就将借工作之便并参考众多网友的体会,将一点移植心得整理出来,希望公司不介意。考虑到每个人接触linux的起点不同,所以下文档按步就班说得比较详细(说得不好听点是罗嗦,^_^,如果您熟悉相关部分,请略过,希望不要当面说俺写的罗嗦,呵). 二、特别声明: 本文的移植过程主要以minigui1.2.3为基础。 本文中提到的注意可能是您容易忽视,而又要引起您注意的地方或者由于理解上的差异而容易造成交叉编译失败的地方。 本文中需要修改的地方以红色字体标注,而添加或者修改的地方以蓝色标注,需要您执行命令的地方以粉红标注(html格式颜色不显,我又懒蛋得写HTML标签,建议您下载附件中的PDF文档)。 另外,本文中提到的脚本编写和修改都请在linux环境下手工编写,不要在windows下或者直接从下面拷贝,免得出现错误。 三、硬件平台: CSB226-PXA250,Cogent ep7312,此文档以CSB226-PXA250参考开发板的移植过程为主来说明. LCD屏幕特性:640x480,支持8bpp. 支持标准PC键盘、鼠标 四、软件环境: 主机:Redhat7.2 目标板:采用umon作为boot loader, 开发环境和运行的内核是Montavista Profession Edition 2.1. 目标板(以下称为target)采用NFS的方式将根文件系统挂接到开发主机(以下称为host)上,其路径为:/opt/hardhat/devkit/arm/xscale_le/target,目标板上以控制台下的framebuffer 方式运行。 host和target都以root身份登陆。 将minigui库文件原代码libminigui1.2.3.tar.gz,资源文件minigui-fonts.1.2.0.tar.gz, minigui-imetabs-1.1.0.tar.gz, minigui-res-1.2.0.tar.gz放在主机任意目录下,而考虑到演示程序编译后没有相应的安装脚本,将源代码包mde-1.2.3..tar.gz放在了 /opt/hardhat/devkit/arm/xscale_le/target/root下面。首先用类似tar zxf liminigui1.2.3.tar.gz命令将所有的压缩包解开。 五、libminigui1.2.3及资源文件的移植: 1、libminigui1.2.3文件的移植: 它移植主要定义交叉编译器已经编译后的目标库和头文件的存放路径,参考给出的交叉编译例子编写了交叉编译脚本build-pxa250 #!/bin/sh

桂花树培育方法

五六月扦插桂花最佳 1.扦插时间的选择与温度的掌握。扦插以五六月份最佳。的适生根温度为25℃至28℃,如温度过低,应覆盖塑料薄膜,增加光照,提高苗床温度。如温度过高,应注意遮阴,并揭起塑料膜一角通风降温或喷雾降温。 2.扦插基质及苗床。扦插基质要求疏松透气、排水良好、含腐殖质高的酸性土或沙质土,最好用蛭石。苗床四周应留通道,开好排水沟。插前土壤要消毒。苗床上设一个高度45厘米的塑料拱棚,以保湿并防淋雨积水。棚上再搭一个高约1.6米的遮阴棚。 3.插穗的选择及处理。插穗的采取应在早晚或阴天进行。插穗选用半木质化枝条,剪成10厘米至12厘米长,下端紧靠节下削成马蹄形,上端留2个至3个叶片。 4.扦插技巧。插穗下端蘸ABT生根粉或用200ppm至500ppm吲哚丁酸浸泡5分钟至10分钟,入土2/3,株行距6厘米×6厘米。插后浇透水,然后盖上塑料薄膜。 5.插后管理。 ①土壤湿度要求在50%左右为宜,而空气湿度则要求保持在85%以上为最好。 ②扦插初期荫棚遮阴度保持在80%左右,这样既防止强光直晒,又保证有足够的散射光照,以利带叶插穗进行光合作用,有利于生根。 ③10天后,叶喷0.2%的磷酸二氢钾或0.5%的过磷酸钙和0.1%的尿素溶液一次。 ④30天后基本生根,可揭去薄膜,并增加光照。生根后的小苗,夏季晴天要注意叶面喷雾与遮阴。 ⑤为使小苗生长健壮,可叶面喷施0.05%的“叶面宝”,不要从根系施肥。到9月至10月或第二年春天即可移栽上盆。 桂花的大面积扦插技术 为木樨科常绿乔木,树杆挺拔,枝繁叶茂,花香醉人,是十大名花之一,为园林绿化的优秀树种。的扦插育苗,一般分夏季和秋季两个季节扦插最容易成活。具体扦插应注意以下几点: 1:苗地的建立选避风向阳、平坦的位置,土壤的PH值为5-6.5的砂质壤土或细颗粒状的生红土,土层要求疏松、通气、透水,排灌方便。 2:整地、开沟、作床、搭阴棚翻耕平整土地二到三次,拣净杂草、根蔸、石块等杂物,开苗地的床沟和围沟,沟深以苗圃的地势确定,达到沟沟相通,流水通畅即可。苗床一般长5-10米,宽1-1.2米,高15-25厘米,表面土壤要整细且略呈龟背状。苗地四周用树木搭一立体形的遮阴棚,棚上及四周盖遮光率60%-75%左右的遮阳网,要求遮阴棚稳固、结实。 3:插条的剪取夏插在农历的端午节前后开始扦插,选择生长旺盛、无病虫害的中壮年树上的外缘或树顶的枝条,取当年生半木质化的嫩枝和已木质化的健壮枝条

桂花树栽培技术

桂花栽培技术 桂花喜温暖,抗逆性强,既耐高温,也较耐寒。桂花较喜阳光,在全光照下其枝叶生长茂盛,开花繁密,在阴处生长枝叶稀疏、花稀少。若在北方室内盆栽尤需注意有充足光照,以利于生长和花芽的形成。桂花性好湿润,切忌积水,但也有一定的耐干旱能力。桂花对土壤的要求不太严,除碱性土和低洼地或过于粘重、排水不畅的土壤外,一般均可生长,但以土层深厚、疏松肥沃、排水良好的微酸性砂质壤土最为适宜。 (1)中耕除草。在以主干为中心1米直径的树盘内重点松土和除草。灌水或降雨后,为防止土壤板结进行中耕松土。 (2)浇水与排涝。桂花的浇水主要在新种植后的一个月内和种植当年的夏季。新种植的桂花一定要浇透水,有条件的应对植株的树冠喷水,以保持一定的空气湿度。桂花不耐涝,及时排涝或移植受涝害植株,并加入一定量的沙子种植,可促进新根生长。 (3) 促花保果:生长期喷施促花王3号溶液,抑制各种作物主梢、赘芽、旁心疯长,促进花芽分化。在开花前、幼果期、果实膨大期各喷一次壮果蒂灵溶液,可增粗果蒂,提高营养输送量。防落花、落果、裂果、僵果、畸形果,使果实着色靓丽、果型美、品味佳。 (4)合理施肥。施肥应以薄肥勤施为原则,以速效氮肥为主,中大苗全年施肥三四次。早春期间在树盘内施有机肥,促进春梢生长。入冬前期需施无机肥或垃圾杂肥。其间可根据桂花生长情况,施肥一两次。新移植的桂花,追肥不宜太早。移植坑穴的基肥应与土壤拌匀

再覆土。喷施新高脂膜溶液可防病菌侵入,提高对肥料的吸收利用,减少肥料用量。 桂花的施肥和简单的养护方法 先将桂花的施肥和简单的养护方法介绍如下: 桂花喜肥,一年没有施肥对桂花树的生长十分不利。桂花树尽量不用化肥,要多用农家肥。桂花树特别喜欢猪粪肥,民间有一谚语叫做“要使桂花香,打烂猪屎缸”。城市没有猪粪,可用腐熟的饼肥液(或惠满丰、春泉八八三、奥普尔等高效活性肥)。施肥要薄肥勤施,从2月开始每10~15天浇一次至8月止。8月后应以追施磷钾肥为主,每隔10天施一次腐熟鸡鸭粪的液肥,促进花芽分化形成。花期内减少用肥量,改为半月施一次磷钾液肥,忌施氮肥。花后要及时追施一次氮液肥,肥不宜浓,量不宜多,避免引起秋发新枝,消耗植株养分。 平时护养措施有以下几点: 1.放置场所:桂花盆景宜放在温暖向阳处,夏季要适当庇荫,避开强光直射。 2.换盆:2至3年换一次盆,选用山泥、腐殖土、沙土按5:3:2配制或腐叶土和沙壤土各半配制的新土进行替换,花盆要求大口径。 3.浇水:桂花盆土要掌握“不干不浇,浇则浇透”的原则。一

linux下minigui移植与软键盘

课程设计成果说明书 题目:Linux下基于minigui的软键盘程序调试 学生姓名:苏腾云/王润志/蒋强/游寺豪/沈龙/陈阳狮学号:0800403220/0800403222/081311128 081311101/081311136/0800403109 学院:机电工程学院 班级:AC08电信 指导教师:赵秋亮老师 浙江海洋学院教务处 2011年07月01日

浙江海洋学院课程设计成绩评定表 2009 —2010学年第2 学期 学院机电工程班级 AC08电信专业电子信息工程 学生姓名(学号) 苏腾云/王润志 游世豪/蒋强 沈龙/陈阳狮 课程设计 名称嵌入式系统课程设计 题目MiniGUI移植 指导教师评语 指导教师签名: 年月日 答辩评语及成绩 答辩小组教师签名: 年月日

附2: 浙江海洋学院课程设计任务书 2010 —2011学年第2 学期 学院机电工程班级 AC08电信专业电子信息工程 学生姓名(学号) 苏腾云/王润志 游世豪/蒋强 沈龙/陈阳狮 课程 名称 嵌入式系统课程设计 设计 题目 Linux下基于minigui的软键盘程序调试 完成 期限 自 2011 年 6 月 20 日至 2011 年 7 月 1 日共 2 周 设计依据本次设计所需知识 1.S3C2410的基本知识 2.Linux系统常用命令 3.linux编辑器VI的使用方法 4.MiniGUI的基本知识 5.MiniGUI的移植方法 设计要求及主要内容1.熟悉linux系统的常用操作命令 2.熟悉VI(或GVIM)的操作方法 3.完成虚拟机VM的安装 4.完成虚拟机VM下的Linux(RedHat9.0)的安装 5.完成交叉编译环境的建立 6.完成PC机环境下minigui的安装与配置,QVFB的安装 7.完成minniGUI在S3C2410A上的移植 8.利用示例程序包中程序验证移植结果,结果能在LCD与QVFB上正常显示 9.调试基于minigui的软键盘程序,并能在QVFB和LCD上显示。10.录制设计结果演示和解说视频 11.完成课程设计说明书的撰写。撰写格式要求按照《机电工程学院毕业设计文本规范》。 参考资料[1]. ARM9嵌入式系统设计――基于S3C2410与Linux.徐英德等.北京航空航天大学出版社.2007年. [2]. 嵌入式系统实验指导书.自编. [3]. 实验指导书-EL-ARM-830型教学实验系统(ARM9).北京精仪达盛科技有限公司. [4]. Minigui实验指导书(for S3C2410).北京精仪达盛科技有限公司. [5]. Minigui编程指南.飞漫公司. [6]. FTP资源:172.16.51.6 用户名:dx 密码:1234. 在/ARM目录下。 指导教 师签字 日期

MiniGUI及其移植与应用

MiniGUI及其移植与应用 权宁一 (东北电力大学信息工程学院吉林吉林132012) 【摘要】:本文介绍了MiniGUI系统在嵌入式开发中的移植与应用。对MiniGUI图形软件的特点、体系结构、工作模式做了叙述,描述了MiniGUI在uc_osⅡ环境中的移植方法,MiniGUI应用软件的开发思想和流程,并对其应用领域做了介绍。 【关键词】:MiniGUI,移植,控件,消息循环 1、MiniGUI概述 随着嵌入式系统在工业控制、信息家电、智能手持终端、办公自动化等领域中的广泛应用,人们对产品的图形用户接口(GUI)的需求越来越强烈。图形美观、界面友好的GUI已广泛应用在3G手机、PDA、智能传感器、工控终端等嵌入式设备上,其中比较成熟的GUI产品有:MiniGUI、MicroWindows、OpenGUI、TinyXWindow、QT/Embedded。 MiniGUI最初是清华大学为数控机床研发计算机控制系统时根据需要独立开发的图形用户接口,它具有代码小巧、实时性好、高效稳定、易于裁减的特点,非常适合应用于嵌入式实时控制系统。MiniGUI可以运行在任何一种具有线程支持的POSIX兼容系统上,同时也是国内出现的最早的遵循LGPL条约的自由软件之一。MiniGUI有三种运行模式:⑴MiniGUI-Threads:运行在MiniGUI-Threads的程序可在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行,可以配合的操作系统有ucosii、vxworks、linux。⑵MiniGUI-lite:每个程序是单独的进程,每个进程可建立多个窗口,只有具备完整unix特性的操作系统才可运行这一模式。⑶MiniGUI-standalone,可以以独立进程方式运行而不需要其它任何支持,这种方式几乎可以支持所有操作系统。MiniGUI具有以下特点:⑴小巧可订制,包含全部功能的库文件只有300k。⑵高稳定性,可移植性好。⑶界面皮肤支持,用户可通过皮肤支持获得华丽外观界面。⑷提供了完备的多窗口机制及消息传递机制。⑸丰富的控件资源,包括菜单、进度条、列表框、按钮、工具栏等。(6)多种键盘布局支持,多字符集及多字体支持,常见的图像文件支持。⑺多种汉字输入法支持,windows资源文件支持。 2、MiniGUI的结构特点与移植方式 2.1MiniGUI的体系结构 图1MiniGUI结构体系 MiniGUI采用了分层结构设计思想,共分为GAL、IAL、Pthread层,MiniGUI核心层,用户接口层三层结构。GAL为图形抽象层,提供了底层操作系统的图形接口,配置MiniGUI选用GAL引擎,就可使用framebuffer作为MiniGUI图形发生引擎;IAL为输入抽象层,它提供了输入设备如键盘鼠标等的驱动,可将输入设备的输入事件最终映射为GUI系统API层的消息事件。有了GAL、IAL可以把底层硬件及操作系统进行完全屏蔽,方便MiniGUI的移植。同时,用户可在XWindow系统中调试运行自己的产品,通过重新编译就可使软件运行在特定的硬件平台上。Pthread(POSIXthread)是提供内核级线程支持的c库函数。MiniGUI核心层为中间层,包含了窗口系统所需要的各个功能模块,详见图1。用户接口层API对于不同的平台是一致统一的,底层系统已被完全屏蔽,用户不必考虑输入设备及绘图细节,只需使用标准C语言进行类似win32库函数调用即可。2.2MiniGUI工作模式 MiniGUI采用微客户/服务器机制,通过消息队列和多线程之间的同步机制来实现。在多线程环境中各线程之间有信息交互的需要,依据"先来先服务"的原则,依次处理每个线程的请求。一个线程首先在desktop微服务器的消息队列中放置一条消息,要求建立窗口,然后进入等待状态。当desktop处于空闲状态时可以立即处理这一请求。最后,desktop返回处理结果,唤醒等待的线程。 MiniGUI启动3个重要的微服务器,它们分别为desktop、parser、timer。其中desktop用于管理MiniGUI窗口中的所有主窗口;parser线程用于采集键盘鼠标事件并转换成API层消息;timer线程用来触发定时器事件。 2.3MiniGUI的移植 嵌入式系统的结构框架从底层到上层依次为:硬件平台、嵌入式操作系统、MiniGUI、用户程序,其中uclinux与uc/OS-II为常用的操作系统,下面以uc/OS-II为例介绍MiniGUI的移植。uc/OS-II具有实时性强、代码简单的特点,在教学及工业实时控制领域得到了广泛应用。MiniGUIforuc/OS-II的配置及编译可在windows环境中的ADS开发平台中进行,编译完成之后生成一个静态库MiniGUI_lib,最终生成包括uc/OS-II、MiniGUI、应用程序在内的可执行映像文件,将映像文件固化写入硬件平台即完成MiniGUI的移植。在编译之前需要进行以下工作:设置MiniGUI配置头文件、确定头文件路径、选定编译规则。MiniGUI配置头文件中参数_AUTO_IAL是模拟键盘鼠标选项;_COM-MM_IAL是uc/OS-II通用输入引擎;_GB_SUPPORT是字符集支持;_USE_OWN_MALLOC为内存管理函数支持;_USE_OWN_STDIO为函数支持。编译规则设置中_MiniGU-I_LIB_声明编译MiniGUI_LIB库;_uc/OS-II_声明目标操作系统;-EC允许隐性类型转换;_NOLINUX_表示非linux系统。3、基于MiniGUI的软件设计开发思想 3.1MiniGUI开发流程 uc/OS-II初始化后创建任务main_task,在该任务中创建POSIX协议线程main_thread,main_thread中调用函数mg_main_task,进入MiniGUI入口MiniGUI_entry,进而调用应用程序入口函数MiniGUIMain,执行用户软件及窗口过程函数。MiniGUI应用程序必须包括的头文件有:common.h--定义了宏及数据类型;minigui.h--定义了接口函数及杂项函数;window.h--定义了窗口的宏及数据类型;control.h--定义了系统内部控件。 MiniGUIMain()是程序的入口点函数,一般用户程序先创建一个主窗口或非模式对话框,在主窗口内建立若干控件,然后建立消息队列,进入窗口消息循环,响应各类消息。通过调用Cre-ateMainWindow()函数创建主窗口,函数返回窗口句柄。函数调用时需给MAINWINCREATE结构体指针赋值,确定主窗口的各项属性值。调用ShowWindow()函数将主窗口进行显(下转第71页 )

u(boot中NANDflash的MTD驱动移植)-

u(boot中NANDflash的MTD驱动移植)- u-boot u-boot中的“与非”闪存的MTD驱动程序迁移移植了linux中的MTD 驱动程序源代码,以支持“与非”闪存擦除、刻录写入和读取驱动程序内存技术设备内存技术设备是Linux的一个子系统,用于访问闪存设备MTD的主要目的是简化新存储设备的驱动,并提供通用接口功能。MTD驱动可以支持CFI接口的非闪存驱动和非闪存驱动。众所周知,“与非”闪存的访问接口不像“非”闪存那样提供标准的CFI访问接口,但“与非”闪存制造商已经对不同品牌和型号的“与非”闪存芯片的访问接口制定了一些常规规定,如命令字、地址序列、命令序列、坏块标记位置、oob区域格式等。 值得注意的是,在工艺方面有两种类型的“与非”闪存:MLC和SLCMLC和SLC属于两种不同类型的NAND闪存SLC的全称是单级单元,即单级单元闪存,而MLC的全称是多级单元,即多级单元闪存。它们的区别在于,SLC的每个单元只能存储一位数据,而MLC 的每个单元只能存储两位数据,MLC的数据密度是SLC的两倍。就页容量而言,还有两种类型的与非:大页与非闪存(例如HY27UF082G2B)和小页与非闪存(例如K9F1G08U0A)这两种类型在页面容量、命令序列、地址序列、页面内访问和坏块识别方面非常不同,并且遵循不同的约定,因此在移植驱动程序时应该特别注意。在下,以大页面NAND flash: HY27UF082G2B为例,介绍NAND flash 的一些基本情况,然后介绍MTD驱动程序的基本结构和流程分析。

最后,介绍了在u-boot中迁移MTD驱动程序的详细步骤: 3 . 4 . 1)nandflash的一些基本信息 fl2400开发板上的NAND Flash芯片型号是现代HY27UF082G2B。英特尔于1988年首次开发了或非闪存技术。它最重要的特点是支持片上执行,彻底改变了EPROM和EEPROM主宰非易失性闪存世界的局面。然后,在1989年,东芝发布了NAND闪存结构,它具有较低的单位成本、较高的容量,并且可以像磁盘一样通过接口轻松升级。“或非”闪存更适合存储少量的关键代码和数据,而“与非”闪存更适合存储大量的高密度数据。 下表说明了非闪存与非闪存的区别:非闪存非闪存性能项目的容量通常为1~4MB,片上支持的最大容量为32MB 8MB~512MB。它可以直接在芯片上启动。它不受支持,需要驱动读取。只有三星芯片支持步进式引导加载器技术,其他芯片必须配备norflash以启动具有较高可靠性、较低位反转概率、常见位反转的引导加载器,并且必须采取验证措施。ECC椭圆曲线算法被推荐用于错误检查和恢复,这导致1/10的非闪存使得非闪存的管理和驱动程序写入更加复杂。存取接口与随机存取存储器和可编程只读存储器相同。地址线地址、数据和命令通过每个使能引脚区和输入/输出线与数据线分开。访问接口可分为地址、数据和命令以及串行访问。随机存取8K-64K块大小(擦除64K~128K单位)必须按顺序存取。擦除时间为5S,慢3毫秒,快速读写速度慢。快速读取,快速读取,刻录和写入可以快速擦除10 ~ 100,000次和100 ~ 100万次。主要用途保存代码和关键数据保存大

怎样采挖和移植桂花大树

怎样采挖和移植桂花大树 一、收枝 桂花大树(这里说的桂花大树是指地径30厘米以上的桂花大树),多是栽种在山边、地头、菜园等处,采挖、吊装时很不方便。因为树大,枝叶茂盛,有的桂花树蓬径达到10米以上,所以在采挖前必须先收枝,不然不便运输。收枝前在桂花树比较大的树杆处先密缠一层草绳,再在树杆外侧顺缠草绳处绑一根2米左右长的小竹片,依实际情况确定竹片的大小、长度等。等所有要收枝的树杆缠好后,用1T以下的手动小吊葫芦,一端挂在中间的主树杆上,另一端挂在要收枝的树杆上,用手慢慢拉动吊葫芦的铁链,让树杆慢慢收拢靠近树中间,直到达到理想的位置为止,依照此方法慢慢将其实树杆也收拢到一起。不能用力过猛,防止拉断树枝。 二、挖树 桂花大树移栽必须带大泥球,泥球大小,一般在1.5米到2.2米之间,确定土球大小后,在土球四周挖一宽50厘米左右的环状沟,深1米左右,泥球苹果型状、陀螺状,将大树用三根树木支撑,防止树倒下,泥球挖好后,站地打包,就地用草绳、龙须草绳等将土球打包好。2米以上的大土球,在草绳包好后,再用铁丝和木板按五角星状固定一次,这样土球更牢固。特大桂花树如当年不移植时,可按土球大小断根,第一年前后(左右)断根,第二年左右(前后)断根,第三年起挖。 三、吊装、运输 吊装时,承吊的树木着力点要用麻皮或布包好,外围采用钉木条绑扎保护,使吊带不和树木直接接触,避免损伤树皮,着力点要选在树木的中下部,吊运时尽量避免来回晃动,减少枝叶擦伤,避免土团松散,以上是对能直接用吊车吊装的桂花大树。对不能直接用吊车吊装的桂花大树,得用挖机修路,慢慢地从山地钩到就近的农用车上,对于树冠大的树木,要用大绳扎起来,底下绑一塑料布箍紧树冠,可以减轻枝叶损伤。 大树起运前,可以喷水洒枝叶保湿,若长途运输,可以在主树杆上插入国光大树营养液2-3支,车顶棚用帆布覆盖好,以尽量减少运输过程中树干及叶面水分的蒸发,如天热时运输,可在树上面盖层杂材再盖帆布,防止树叶变黄。大树装好后,用绳索固定,以减少运输途中的晃动,注意安全。卸下树木时,尽量靠近定植穴,如能在起吊后一次送到定植穴内则最佳。 四、定植、养护 桂花大树定植前开挖的定植穴要比土球大,使土球和定植穴周边有一定距离,以便定植后填入较多的表层细肥土,利于发根。栽种桂花大树时,一定要注意把树木栽直,特别是树冠大的桂花树以后再移动调整比较困难,所以要一步到位。桂花树栽直后,一般按三角形为大树立支撑柱,支撑柱要埋入土壤,在支撑柱脚下填埋大石块以防下陷。大树的支撑柱在培土前先撑好可以防止培土时树体歪斜。支撑柱上方与树干绑扎时应用松软材料衬垫。同时要把3个支撑柱上方绑牢,必要时还可以加腰匝。支柱可选用衫木材料,也可选用钢管,树冠大的树最好选用钢管。为减少树干水分蒸发,保持树干湿度,用草绳或布条从树干基部往上密缠树干,以后常喷水保湿。条件好的地方可以在桂花树顶部装一喷头,看天气情况早晚两次适当喷水。非栽树季节栽种桂花大树时,要在树冠上方搭阴棚遮阴,阴棚可用竹木或钢管搭脚手架,脚手架用遮阳网覆盖。选用50%遮光率的遮阳网。为促进大树发根,定植初期,在浇水时加入生根剂灌根。一周后在树四周打入国光棒肥,为早日恢复树势,移植后第一年

MiniGUI3.0+tslib1.4移植过程

硬件平台:ASM9260开发板 Linux内核:linux-2.6 作者:孙怀亚 qq:413983254 交叉编译器:arm-none-linux-gnueabi-gcc MiniGUI交叉编译过程--------------------------------------------------------- 在开始之前,先准备好交叉编译过程中所需要的几个库文件: 1.jpegsrc.v6b.tar.gz 2.libpng-1.2.18.tar.bz2 3.tslib-1. 4.tar.gz 4.libminigui-gpl-3.0.12.tar.gz 5.minigui-res-be-3.0.12.tar.gz 6.zlib-1.2.3.tar.gz 7.freetype-1.3.1.tar.Gz 8.mg-samples-3.0.12.tar.gz 如果下面配置或命令有错,一般是由于拷贝制作word文档时,软件自动首字母变成大写或自动加空格的原因,切记要改回来!!!!! 第一步:首先建立新目录 [root@localhost /]# mkdir -p /root/cross 将开头所述的文件全部拷贝至 /root/cross目录下 第二步:安装 zlib 库,这个是后面的库的编译基础。 [root@localhost cross]# tar zxvf zlib-1.2.3.tar.gz 由于 zlib 库的configure 脚本不支持交叉编译选项,只好自己手动临时把 gcc 修改成指向我们的交叉编译器arm-none-linux-gnueabi-gcc [root@localhost cross]# cd /usr/bin/ [root@localhost bin]# mv gcc gcc_back [root@localhost bin]# ln -s /usr/local/arm/arm-2008q3-linux/bin/arm-none-linux-gnueabi-gcc ./gcc [root@localhost bin]# mv ld ld_back [root@localhost bin]# ln -s /usr/local/arm/arm-2008q3-linux/bin/arm-none-linux-gnueabi-ld ./ld 修改完成后回到 /root/cross/zlib-1.2.3 目录下: [root@localhost bin]# cd /root/cross/zlib-1.2.3 [root@localhost zlib-1.2.3]# ./configure --prefix= /usr/local/arm/arm-2008q3-linux/arm-none-linux-gnueabi --shared

USB驱动移植教程

USB驱动移植教程 一.USB驱动框架 在Linux系统中,提供了主机侧和设备侧视角的USB驱动框架,这里,仅仅讲解主机侧角度看到的USB驱动框架。 从主机侧的角度而言,需要编写的USB驱动程序包括主机控制器驱动和设备驱动两类。USB主机控制器驱动程序控 制插入其中的USB设备,而USB设备驱动程序控制该设备如何作为设备与主机通信。在USB主机控制器驱动和USB 设备驱动之间还有一层叫USB核心层。USB核心负责USB驱动管理和协议处理工作,它通过定义一些数据结构、宏 和功能函数,向上为USB设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;通过全局变量维护整个 系统的USB设备信息,完成设备热插拔控制、总线数据传输控制等。说了那么多,无图无真相啊~~

Linux USB主机侧驱动总体框架 二.USB驱动移植步骤 1.S5PV210主机控制驱动的移植 USB主机控制器有3种规范,UHCI(Universal Host Controller Interface),这种规范主要是Intel、Via芯片公司提供支 持PC主板的;OHCI(Open Host Controller Interface),这种规范是微软提出来的,主要应用在非PC系统上的嵌入式 领域上的USB芯片;EHCI(Enhanced Host Controller Interface),这种后来为提高USB速度而提出的规范,它支持 最高速度为480Mbps。 在《S5PV210_UM_REV1.1》手册上搜索OHCI关键词,会发现下面一段话 这表明S5PV210这款CPU支持一个USB主机接口,同时支持EHCI和OHCI这两种规范,支持USB1.1和USB2.0规范,支持最高的外设传输速率为480Mbps。注意了,它并不支持USB3.0规范的USB设备,所以做测试的时候,千万不要拿USB3.0规范的USB设备去测试。 2.1移植ohci-s5p驱动 打开内核目录:driversusbhost,发现Linux系统提供了大量的主机控制器驱动,找遍所有平台,都没有找到ohci-s5p.c源码。很遗憾,3.8的内核没有提供S5PV210的USB HOST控制器驱动程序。最好验证有没有提供的办法就是, 烧写网蜂提供的第二版的uImage进去,然后找个U盘、或者鼠标插入Webee210开发板的USB HOST接口,看看串 口有没有打印什么信息,结果是不会有任何反应的。既然没有提供,这就需要我们自己来编写了,这下不好办了吧?

桂花的栽培方法

桂花的栽培方法 桂花是一种非常香的乔木,它的花是淡黄色的,簇拥在一起,非常的美。桂花的另一个名字叫做木樨,属于常绿的乔木。桂花属于中国特有的花,在中国古代,人们会经常将桂花制作成各种糕点。桂花还有很好的降火去口臭的作用,将桂花香包放在车里可以祛除车内的异味。那么大家知道桂花是怎么栽培的吗?今天小编为大家讲解桂花的栽培技术。一、桂花栽培技术 1、选好品种之后进行播种或者嫁接,还可以进行扦插和压条的繁殖方法。种子的话需要沙藏六个月左右才能播种。扦插的话要选择春季发芽之前种植,选一个比较好的插条插入栽培土里,使用塑料薄膜覆盖泥土,然后放在比较蔽阴的地方进行养护。一般秋天就会生更发芽。盆栽种植的话,直接将桂花苗移植到盆栽里就行了。 2、如果是露地栽培,需要在早春的时候进行。因为桂花是一种比较需要日照和阳光的乔木,需要在排水好,雨水多的地方生长。栽前挖穴施肥,苗木带土移植。然后灌水和施肥,一天浇两次水,一个月施一次肥。 3、盆栽种植桂花的话,要选好营养土,适当的浇水和施肥,桂花长出新的枝干的时候,要对它进行修剪,还要防治害虫。 二、注意事项 1、桂花是比较喜欢有些微酸的土壤的,所以可以选择一些山泥土作为种植桂花的营养土。

2、浇水是需要适时的,一般新梢之前要少浇,阴雨天的时候雨水是比较充足的,所以要少浇水。夏天和秋天属于旱天,所以是需多浇水的。平时的话保持土壤湿润就行了。水不需要浇太多,容易导致桂花的根部发烂,有积水要及时的清理。 3、种植桂花要定期的追肥,在春天的时候一个月要施肥三次,十天一次。 4、适当的进行修剪。 5、要定期的防治虫病,桂花比较香,所以很容易惹虫子。 以上,就是桂花的种植技术,大家现在学会种植桂花了吗?桂花是比较难种植的,桂花对水土的要求是比较高的,桂花需要在比较肥沃的土壤里才能生长。但是桂花盆栽是比较好种植的,因为现在市面上有很多营养土可以买,不需要考虑太多土壤方面的因素。将桂花种子或者桂花苗栽培在盆中,定期的浇水和施肥,就能栽培出比较好看的桂花盆栽。

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