在Linux里程序为什么要烧写镜像

在Linux里程序为什么要烧写镜像,第1张

镜像文件把原文件重新转化编译为烧写可以读的文件。

烧写Bootloader到开发板中,烧写的是hex文件,那么我的板子可以利用H-JTAG和H-FLASH软件烧写,在windows下在命令提示符中用tftp命令将镜像文件烧写到目标板中。

软件平台:linux需要的三个重要镜像:u-boot、uimage、filesystem

目的:刚买的开发板,在没有任何了解的情况下首先安装一个linux *** 作系统,我们采用光盘资料中提供的三个镜像(软件平台)。我们的目的就是把三个文件烧写到开发板的flash里面,不用管他的存放地址,按照说明手册的方法可以烧入后就可以正常启动了,我已经烧写成功进入 *** 作系统了。

简单介绍:硬件平台是扬创的三星2440套餐5,ARM9内核,光盘提供winCE和linux两个 *** 作系统的移植方法。这里我们已经成功移植了WINCE,比较简单,只要按照手册的方法一步一步进行就可以了,我们要所的linux,这个手册说明不是很详细,经过摸索我们算是移植到了板上,其实只是把光盘提供的三个镜像烧入到了开发板上,可以运行进入 *** 作系统而已,至于 *** 作系统的定制还有一系列 *** 作还要继续研究。下面就说说这个简单的烧入 *** 作,虽然简单,但是也是查了很多资料后迂回完成的,其中走了很多弯路!u-boot,是linux *** 作系统的引导文件,他和vivi是一样是bootloader。源代码不同,如果你用u-boot那你就要烧入与之对应的内核和文件系统,如果用vivi也一样,要烧入和vivi对应的内核以及文件系统。Uimage,这里就是我们所说的内核kernel。Filesystem,文件系统。三个镜像烧入后再上电就可以启动 *** 作系统了。

具体 *** 作步骤:

1:在PC上安装好TFTP软件,这个软件用于开发板和PC之间的文件传输。然后把光盘提

供的三个镜像文件拷贝到TFTP根目录下面,等待传输。

2:第一次下载bootloader,我们下载的是u-boot.Bin,这个下载需要wiggler和并口,如果

开发板没有bootloader,那么第一次烧写必须通过并口,以后更新只要通过网络更新就可以

了。在烧写bootloader前必须先装好GIVEIO驱动,连接好wiggler后运行光盘中u-boot.bat

批处理文件,全部选择0后显示EPPPPP…..开始烧写,烧写完毕后退出,重新上电后显示

Utu-linux的小企鹅的图片,这样bootloader就烧写好了。以后要更新u-boot只要网络更新就可以了。

3:接下来我们就要烧写内核kernel了,运行超级终端,波特率设置115200,连接开发板和

PC之间的串口,然后开发板接入和PC一样的局域网内(这点很重要,我走了很多弯路),

打开电源,在超级终端可以看到启动信息,快速按空格键进入utu-bootloader的命令行。

注意:如果烧写好三个镜像后linux运行不正常,请查处flash后再重新来一次。擦除flash

命令:nand scrub。

4:run install-bootloader下载更新uboot

Utu-bootloader里面设置了自己的IP为192.168.1.168;在我们开始烧写之前先设置好PC

的地址作为服务器地址,我设成192.168.1.103,网关:192.168.1.1。虽然在同一个局域网,

Setenv serverip 192.168.×.× 命令把服务器地址设置成和PC地址一样的,否则无法下载。

出现loading:TTTTTT的情况。

5:run install-kernel 下载更新uimage同上6:run install-filesystem 下载更新文件系统

注意:更新文件系统之前,要reset或者更新上电复位进入utu-bootloader命令行,否则下

载完毕,重新启动utu-linux的时候,会出现错误。##…表示一直在正常传送数据。这个

过程在TFTP里面都有记录。

linux-2.6.35在fs2410开发板启动后,通过nfs挂载文件系统,但是rtc不能用,也会在挂载文件系统之前打印如下提示信息:

TCP cubic registered

NET: Registered protocol family 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

IP-Config: Complete:

device=eth0, addr=192.168.20.253, mask=255.255.255.0, gw=192.168.20.1,

host=thomas_fs2410, domain=, nis-domain=(none),

bootserver=192.168.20.192, rootserver=192.168.20.192, rootpath=

Looking up port of RPC 100003/2 on 192.168.20.192

Looking up port of RPC 100005/1 on 192.168.20.192

VFS: Mounted root (nfs filesystem).

Mounted devfs on /dev

Freeing init memory: 184K

解决方案:

1. 内核配置选项

--- Real Time Clock

[*] Set system time from RTC on startup and resume

(rtc0) RTC used to set the system time

[ ] RTC debug support

*** RTC interfaces ***

[*] /sys/class/rtc/rtcN (sysfs)

[*] /dev/rtcN (character devices)

[ ] RTC UIE emulation on dev interface

*** on-CPU RTC drivers ***

<*> Samsung S3C series SoC RTC

2. linux kernel 中 已经支持S3C2410的RTC,但是并没有添加到平台设备初始化数组中,所以系统启动时并不会初始化这一部分,需要修改文件mach-smdk.c

static struct platform_device *smdk2410_devices[] __initdata = {

&s3c_device_ohci,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c0,

&s3c_device_iis,

&s3c_device_rtc, //新增代码

}

3. 创建设备节点,在文件系统/dev目录下执行:

sudo mknod rtc c 10 135

4. 重新编译内核,查看启动信息

S3C24XX RTC, (c) 2004,2006 Simtec Electronics

s3c-rtc s3c2410-rtc: rtc disabled, re-enabling

s3c-rtc s3c2410-rtc: rtc core: registered s3c as rtc0

这里说明rtc驱动起来可以正常工作了

S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics

s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled

No device for DAI UDA134X

No device for DAI s3c24xx-i2s

ALSA device list:

No soundcards found.

TCP cubic registered

NET: Registered protocol family 17

s3c-rtc s3c2410-rtc: hctosys: invalid date/time

以上信息说明当前 RTC 时间invalid , RTC 初始时间为 Wed Dec 31 23:59:59 1969

从内核函数 int rtc_valid_tm(struct rtc_time *tm) ,可以看出,当 year 小于 1970 时,认为是时间 invalid ,函数返回 -EINVAL

drivers/rtc/rtc-lib.c

/*

* Does the rtc_time represent a valid date/time?

*/

int rtc_valid_tm(struct rtc_time *tm)

{

if (tm->tm_year <70

|| ((unsigned)tm->tm_mon) >= 12

|| tm->tm_mday <1

|| tm->tm_mday >rtc_month_days(tm->tm_mon, tm->tm_year + 1900)

|| ((unsigned)tm->tm_hour) >= 24

|| ((unsigned)tm->tm_min) >= 60

|| ((unsigned)tm->tm_sec) >= 60)

return -EINVAL

return 0

}

EXPORT_SYMBOL(rtc_valid_tm)

下面来验证一下这个想法

# hwclock

Wed Dec 31 23:59:59 1969 0.000000 seconds

# date

Thu Jan 1 00:06:58 UTC 1970

系统时间是通过 date 来设置的, RTC 时间是通过 hwclock 来设置的。开机时系统时间首先通过 RTC 来获得,RTC没有设置时,系统时间也会使用Wed Dec 31 23:59:59 1969。

# hwclock --help

BusyBox v1.9.2 (2008-04-01 21:32:34 CST) multi-call binary

Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc] [-f FILE]

Query and set a hardware clock (RTC)

Options:

-r Read hardware clock and print result

-s Set the system time from the hardware clock

-w Set the hardware clock to the system time

-u The hardware clock is kept in coordinated universal time

-l The hardware clock is kept in local time

-f FILE Use the specified clock (e.g. /dev/rtc2)

# hwclock -s

hwclock: settimeofday() failed: Invalid argument

# hwclock -w

s3c2410-rtc s3c2410-rtc: rtc only supports 100 years

hwclock: RTC_SET_TIME: Invalid argument

以上错误信息都是因为 year 设置不当引起的。没有设置 RTC , RTC 也不会启动计时。

下面首先设置正确的系统时间,然后将系统时间传递给 RTC 。

# date 040612282008.20

Sun Apr 6 12:28:20 UTC 2008

# hwclock -w

# hwclock

Sun Apr 6 12:29:01 2008 0.000000 seconds

# hwclock

Sun Apr 6 12:30:15 2008 0.000000 seconds

Ok , RTC 开始工作了!

为了使系统时间和 RTC 时间同步,可以在初始化文件中添加命令

Hwclock –s

使每次开机时读取 RTC 时间,并同步给系统时间。

在 etc/init.d/rcS 中添加

/bin/hwclock -s

时间设置的相关命令(转载)

1. 在虚拟终端中使用date 命令来查看和设置系统时间

查看系统时钟的 *** 作:

# date

设置系统时钟的 *** 作:

# date 091713272003.30

通用的设置格式:

# date 月日时分年. 秒

2. 使用hwclock 或clock 命令查看和设置硬件时钟

查看硬件时钟的 *** 作:

# hwclock --show 或

# clock --show

2003年 09月 17日 星期三 13 时24 分11 秒 -0.482735 seconds

设置硬件时钟的 *** 作:

# hwclock --set --date="09/17/2003 13:26:00"

或者

# clock --set --date="09/17/2003 13:26:00"

通用的设置格式:hwclock/clock --set --date=“ 月/ 日/ 年时:分:秒” 。

3. 同步系统时钟和硬件时钟

Linux 系统( 笔者使用的是Red Hat 8.0 ,其它系统没有做过实验) 默认重启后,硬件时钟和系统时钟同步。如果不大方便重新启动的话( 服务器通常很少重启) ,使用clock 或hwclock 命令来同步系统时钟和硬件时钟。

硬件时钟与系统时钟同步:

# hwclock --hctosys

或者

# clock --hctosys

上面命令中,--hctosys 表示Hardware Clock to SYStem clock 。

系统时钟和硬件时钟同步:

# hwclock --systohc

或者

# clock --systohc

使用图形化系统设置工具设置时间

参考:http://blogold.chinaunix.net/u2/63560/showart_518707.html


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8536985.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存