首页 > 编程知识 正文

h3c r4900 g3服务器装系统,移远opencpu教程

时间:2023-05-06 01:54:34 阅读:63366 作者:3804

在网上搜索了一会儿,很多人都遇到了这种情况。 出现问题的位置可能是DM9000网卡驱动程序关闭网卡的位置。 如果是,请尝试将代码更改为:

毕竟,只是第一次打不通,以后都打不通。 (据网友们说这很正常),如下图所示。

那么,现在只剩下一个问题。 就是使用tftp下载。 我们不在此讨论在Linux上安装和配置tftp服务器。 在网上多搜索一下吧。 但是,tftp下载时出现问题,总是出现传输不完整、重新传输的现象,循环如下图所示。

困惑了很久的tftp问题终于解决了。 心情真爽啊。 首先,分析了上图中的现象,表明下载过程中可以断断续续地下载。 但是,如果因为某种原因导致网络超时并重新下载,我认为这种可能性有两种。 1、u-boot下网络延迟设置; 2、我的物理网络结构。 首先,关于第一个,我们修改了net/net.c的网络延迟设置,但结果是不行的。 接下来,我们来试试第二种情况。 以前我的网络由路由器管理,主机和开发板也通过路由器连接,所以现在我用交叉网络直接连接主机和开发板。 试试看,果然很好啊。 哈哈。 至此,网络部分的移植总算完成了。

8 )实现u-boot引导Linux内核的启动。

上一节介绍了对Nor Flash和Nand Flash的u-boot启动支持,但本节介绍了u-boot如何启动Linux内核。

、机器代码的确定

u-boot和kernel通常都有名为MACH_TYPE的计算机代码,只有在匹配时才能引导内核。 如果不匹配,将显示与以下内容类似的mach错误消息:

首先,确定u-boot的MACH_TYPE。 在u-boot的include/asm-arm/mach-types.h文件中,为每个CPU定义了非常多的MACH_TYPE,您可以找到以下定义:

、准备可直接引导至u-boot的内核uImage

通常,要启动kernel,必须向u-boot提供参数信息,如ramdisk ram中的地址。 编译的u-boot在根目录下的tools目录中有一个名为mkimage的工具。 他可以在zImage中添加头。 也就是说,通常让我们编译的内核zImage添加标头信息部分。 添加标头的image通常称为uImage。 uImage被称为u-booge

以下是mkimage工具的使用方法。

用:大括号括起来是可选的

mkimage [-x ]-a arch-OOS-ttype-ccomp-aaddr-eep-nname-ddata _ file [ : data _ file . ] image

可选:

- a:set architecture to‘arch’//用于指定CPU类型。 例如,arm-o:setoperatingsystemto‘OS‘//用于指定操作系统,例如Linux-t:setimagetypeto‘//

- c :指定set compression type‘comp‘//压缩类型

- a :指定要将setloadaddressto‘addr‘(hex ) image加载到的位置

-e:setentrypointto‘EP‘(HEX ) /内核条目地址通常是image的加载地址0x40 (报头大小)

- n:set image name to‘name’//image头部结构中的命名

- d:useimagedatafrom‘datafile‘//无头信息的image文件名

- x :设定setx IP (execute in place )//执行位置

首先,将u-boot下的tools mkimage复制到主机上的/usr/local/勤奋香菇目录中,以便主机上的任何目录都可以使用该工具。 现在进入kernel生成目录(通常是arch/arm/boot目录),执行以下命令将在该目录下生成uImage.img镜像文件,并将其复制到tftp目录下这就是我们说的uImage。

mkimage-n‘Linux-2.6.30.4’- aarm-o Linux-t kernel-cnone-a0x 30008000-e0x 30008000-dzimageuimage.img

Nand Flash分区。 看看内核是如何在arch/arm/plat-s 3c 24 xx/common-smdk.c上进行分区的。

起始地址结束地址

uboot :0x00000000

0x00030000

param : 0x00030000    0x00040000 //注意这个环境变量的地址范围要与上一节补充内容中配置的CONFIG_ENV_OFFSET一致kernel: 0x00050000    0x00200000

root  : 0x00250000    0x03dac000

④、设置修改u-boot的启动参数,在u-boot命令行下输入:

//设置启动参数,意思是将nand中0x50000-0x00200000(和kernel分区一致)的内容读到内存0x31000000中,然后用bootm命令来执行

set bootcmd ‘nand read 0x31000000 0x50000 0x00200000;bootm 0x31000000‘

saveenv  //保存设置

⑤、把uImage.img用tftp下载到内存中,然后再固化到Nand Flash中,操作和执行图如下:

tftp 0x30000000 uImage.img  //将uImage.img下载到内存0x30000000处

nand erase 0x50000 0x200000 //擦除nand的0x50000-0x200000的内容

nand write 0x30000000 0x50000 0x200000 //将内存0x30000000处的内容写入到nand的0x50000处

最后,我们重新启动开发板,可以看到,内核被u-boot成功引导起来了,如图:

#define MACH_TYPE_SMDK2440 1008  //针对2440的MACH_TYPE码的值定义为1008

那么我们就修改u-boot的MACH_TYPE代码引用部分,确定u-boot的MACH_TYPE。如下:

#gedit board/samsung/my2440/my2440.c   //修改board_init函数

/* arch number of SMDK2410-Board *///gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;改为:

gd->bd->bi_arch_number = MACH_TYPE_SMDK2440;

其次,确定kernel中的MACH_TYPE。在kernel的arch/arm/tools/mach-types文件中也针对不同的CPU定义了非常多的MACH_TYPE,也可以找到下面这个定义:

smdk2440  MACH_SMDK2440   SMDK2440   1008

那么我们就修改kernel的MACH_TYPE代码引用部分,确定kernel的MACH_TYPE。如下:

#geditarch/arm/mach-s3c2440/mach-smdk2440.c   //修改文件最后面

//MACHINE_START(S3C2440, "SMDK2440")改为:

MACHINE_START(SMDK2440, "SMDK2440")

#gedit arch/arm/kernel/head.S  //在ENTRY(stext)下添加如下代码(红色部分)

ENTRY(stext)

mov    r0, #0

mov    r1, #0x3f0   //上面的MACH_TYPE值1008换成十六进制就是0x3f0

ldr    r2, =0x30000100msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE

.......

分别重新编译u-boot和kernel。u-boot下载后,记得要saveenv;kernel用tftp下载到内存后使用go命令来测试引导内核,结果可以引导了,如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。