移植vivi引导linux2.6.14.7内核修改的地方

本文详细介绍VIVI启动加载程序的移植步骤,包括环境搭建、配置修改、分区设置及烧录过程。针对不同编译器版本的问题给出了解决方案。

一.下载一个纯净版的vivi主要修改几个地方

1LINUX_INCLUDE_DIR       = /kernel/include/(改成你存放linux kernel源代码的地址,因为编译vivi需要用到kernel源代码的部分头文件)----我本来是要把内核升级成2.6,但是包含2.6 include就是有问题,只好把他改成2.4,我的linux就是2.4,不过这个关系不大.

2CROSS_COMPILE   = arm-linux-(改成你存放交叉编译工具的路径,通常交叉编译工具的路径都已经在profile文件中声明,所以一般直接写arm-linux-

3ARM_GCC_LIBS    =/usr/local/2.95.3/arm-linux/lib/gcc-lib/arm-linux/2.95.3(改成你安装交叉编译工具的相应路径)- ---3.4.1的编译器会报错:说什么mshort-load-bytes选项无效,搞了好久不弄明白,只好用2.95.3,我弄了两个编译环 !:) 然后就是配置选项了,make menuconfig之前,建议先make clean,先把原来试验产生的目标文件清除.

二.我移植到了开发版里的vivi的版本为1.4.现在讲一下具体修改的过程.

1.首先是拷贝vivi源代码到/home目录,解压缩.然后是修改makefile,具体是:
a.
修改为“LINUX-INCLUDE-DIR = /kernel/include/(改成你存放linux kernel源代码的地址,因为编译vivi需要用到kernel源代码的部分头文件)----我本来是要把内核升级成2.6,但是包含2.6 include就是有问题,只好把他改成2.4,我的linux就是2.4,不过这个关系不大.

b. 修改为“CROSS-COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-”
c.
修改为"ARM_GCC_LIBS =/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3"
   
在这里我遇到一个问题,我用3.3.23.4.1的编译器编译vivi会报很多错误,比如什么:invalid option "no-fpu"之类的,但是用2.95.3就没这么多问题,只是在make head.s文件时不能产生head.o件。不知道是只有我一个人有这个问题还是大家都有,总之网上没有人提到具体怎么解决这个问题。不是说换个vivi就是说换个版本的交叉编译工具,就是这个小 问题卡了我将尽两天,浪费了大量的精力,真是受不了。最后我把vivi解压后的arch/s3c2410/head.o文件先保存,再make clean后,重新make时再把它cp回来。总算是过了,不过还没从根本上解决,只好等有时间再回来好好研究了。
2.
然后是修改arch/s3c2410/smdk2410.c与引导内核保持一致

我将要移植的内核是linux-2.6.14.7,对它分区如下:

 

 

 


古在此将smdk2410.c修改为
#ifdef CONFIG_S3C2410_NAND_BOOT

mtd_partition_t default_mtd_partitions[] = {

       {
              name:           "vivi",
              offset:           0x00000000,
              size:              0x00020000,
              flag:              0
       }, {
              name:           "param",
              offset:           0x00020000,
              size:              0x0010000,
              flag:              0    
       }, {
              name:           "kernel",
              offset:           0x0030000,
              size:              0x001c0000,
              flag:              0
       }, {
              name:           "root",
              offset:           0x00200000,
              size:              0x00200000,
              flag:              0
              //flag:            MF_BONFS        
       }, {
              name:           "user",
              offset:           0x00400000,
              size:              0x03ef8000,
              flag:              0                   
       }

};

#endif
3.
修改cmd_line,因为我是用linux2.6的内核,还想使用ramdisk,所以设置为:

“char linux_cmd[] = "initrd root=/dev/mtdblock/3

init=/linuxrc console=ttySAC0,115200 mem=64M";”

你也可以设为:

“char linux_cmd[] = "initrd root=/dev/mtdblock/3 init=/linuxrc console=ttySAC0””
4. 
然后make menuconfig,主要是去掉ecc。其他的设置就不细说了。
5.  
最后,make vivi 就可以的到一个名为vivi的文件,烧到nandflash

当把vivi烧进去后,可以通过输入part show查看MTD分区情况,这个分区表应该和后面kernel中的MTD分区保持一致,但现在并不是一致的,为什么呢?这是因为刚才你修改的只是vivi第一次启动时候默认的分区设置。具体分区情况要使用bon part命令来分。重新bon分区flash,这是十分必要的,相当于重新分区并格式化了整个flash,bon分区后flash里面的数据将全部丢失,所以要再把前面 新生成的vivi烧入目标板上,当然现在就可以只通过串口把vivi烧写进去,不用像第1步那样操作烧写vivi,但是注意bon命令重新分区后千万不要 断电了再烧写vivi,否则就不能通过串口烧vivi,具体步骤如下:

(1)这里将flash分成4个区(viviparam只占一个区),输入bon分区命令:

     #bon part 0 192K 2M

 注:一开始我按网上提供的#bon part 0 192K 2M 4M分区,可总不成功,最后去掉后面的4M就成功了,我也不知道是啥原因。

     解释一下上面的命令:

      1个分区从0开始;

      2个分区从0x30000(192K)开始;

      3个分区从0x200000(2M)开始;

      4个分区从0x400000(4M)开始.

(2)分区成功后,可以通过命令bon part info或者part show来查看bon分区信息,接下来不要断电,直接通过串口下载vivi,但是要注意的是,linux下用xmodem协议下载文件很有可能出现传输过程中断线或者连不上的情况,但是在windowsXP的附件中的超级终端下通过xmodem传输文件过程却是十分的理想,所以我建议从前面的第3步一开 始就都在windowsXP环境下的超级终端里进行操作(不过我是在linux下操作的),输入命令:

#load flash vivi x

然后点击终端窗口中的传送下的发送文件,采用xmodem协议,选择要下载的vivi码即可.

(3)等待文件传输完毕后,输入boot重启目标板,并按住空格键重新进入vivi模式下,输入命令:

#part show

即可看到重新的分区表:

vivi> part show

mtdpart info. (5 partitions)

name              offset        size        flag

------------------------------------------------

 

 

 

Vivi正常启动后输出信息如下:

 

 

此至,VIVI移植圆满完成,在引导内核时我们将根据须要通过param set 命令重新设置内核引导参数。

注:

1.这次修改成功后,下次再烧写vivi时只要烧写这次修改后编译成功的vivi目标代码就可以了,无须再对烧进后的vivi更新了。

2.将kernel烧到nandflash里的时候出现invalid mtd info.信息,就是在使用viviload命令的时候出现的问题.param save也会出现问题.总之就是不能往flash里写东西.看了一下vivi的启动信息,并且和网上其它人的启动信息比较了一下,发现在memory mapping的时候都是正常的,但是我的启动信息里没有nandflashid,厂商等信息.于是在windows下用sourceinsight 个软件将vivi添加到一个工程里,查看main.c(里面可以看出了vivi的启动过程),发现对mtd的初始化等依赖于smc功能,然而我在编译的时 候是把smc掉的.重新编译vivi,make menuconfig,选中smc支持.编译,出错,说什么在mtd.o里什么mtd_nand_ecc没有定义之类的,抱着瞎试的态度,smc支持下 的关于ecc的项选中,编译通过.然后烧到板子上,启动,果然出现了nandflash的厂商信息,load命令也可以正常使用了.


该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年1224日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在1000至4000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值