历史上的今天
返回首页

历史上的今天

今天是:2024年11月10日(星期日)

正在发生

2021年11月10日 | mini2440 uboot使用nfs方式引导内核,文件系统

2021-11-10 来源:eefocus

看了一段时间的u-boot了,到今天才真正完全实现u-boot引导内核和文件系统,顺利开机,在此记录完整过程


1、首先如果你u-boot还没有一直也没有关系,这里上传了一个已经移植好的u-boot,版本问2010.03,多谢tekkaman分享的这个源码


分享下载地址:u-boot-2010.03

编译uboot的过程就不在多说了,解压到你希望的目录下执行make,当时事前安装好交叉编译工具,这个相信大家都会


编译完成之后生成uboot.bin文件,使用mini2440自带的USB下载方式下载到开发板,选择v命令下载即可


开机界面如下,你的可能不完全显示的一样,这是经过我修改的


U-Boot 2010.03 (Jun 20 2013 - 08:43:59)

 

Modified by Seal (king_haitao@163.com)

Study Linux and love linux forever!!

Study u-boot

 

I2C:   ready

DRAM:  64 MB

Flash:  2 MB

NAND:  256 MiB

Video: 240x320x16 20kHz 62Hz

In:    serial

Out:   serial

Err:   serial

USB slave is enable!

Net:   dm9000

Hit any key to stop autoboot:  0 

[u-boot@MINI2440]#

然后就要开始考虑怎么下载内核了,不错,要引导内核首先你需要把内核下载的你的内存中,那么首先配置好你的下载环境是最重要的


2、linux nfs安装与配置


在ubuntu下安装、配置nfs服务的步骤如下: 


安装nfs 


Ubuntu上默认是没有安装nfs服务器的,因此我们首先安装nfs服务器端: 


$sudo apt-get install nfs-kernel-server 


在一些文档中,提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。


配置/etc/exports 


nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。 


例如,我们要将根目录下的rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:


/rootfs *(rw,sync,no_root_squash)


其中: /rootfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。


nfs的安装如果大家还有疑问网上可以多查查


接下就要配置pc端和我们开发板端的ip等,以达到我们使用nfs这种方式下载image的目的


从新启动nfs


/etc/init.d/nfs-kernel-server restart

挂载方法:


mount 192.168.1.103:/root/tftpboot  /test


嵌入式要mount 的时候 使用


mount -o nolock 192.168.1.103:/root/tftpboot /mnt/net


3、配置开发板ip和主机ip


我的配置参数:


开发板ip:192.168.1.102


主机ip(pc端ip):192.168.1.103


uboot启动起来的使用printenv查看默认参数,包括开发板ip、server ip,还有其他一些启动参数


[u-boot@MINI2440]# printenv

bootdelay=5

baudrate=115200

ethaddr=08:08:11:18:12:27

netmask=255.255.255.0

tekkaman=bmp d 70000

 stdin=serial

stdout=serial

stderr=serial

ethact=dm9000

ipaddr=192.168.1.102

serverip=192.168.1.103

gatewayip=192.168.1.1

bootcmd=nfs 0x30008000 192.168.1.103:/root/tftpboot/w35_image.img ;bootm 30008000

bootargs=root=/dev/nfs rw nfsroot=192.168.1.103:/root/tftpboot/rootfs ip=192.168.1.102:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M

 

Environment size: 460/131068 bytes

[u-boot@MINI2440]# 

上面打印出来的参数请参照设置,特别是以下说到的几个参数格外小心,他们直接关系到你的image是否可以成功下载,成功被引导,文件系统是否成功挂载并启动


其实为了使用nfs而设定的参数为以下以下几个:

ipaddr(开发板ip)


serverip(pc端作为服务器的ip)


gatewayip(使主机ip和开发板ip在同一个网段内)


bootcmd用于启动时下载image到指定的内存地址,同时使用bootm命令引导内核启动


bootargs 用于使用nfs方式挂载我们创建好的文件系统


其他参数从字面大家也可以理解,设置方法很简单,举例说明,设置bootcmd的方法


setenv bootcmd 'nfs 0x30008000 192.168.1.103:/root/tftpboot/w35_image.img ;bootm 30008000'

其他设置方法依次类推,值得注意的是:设置完成必须保持到内存,下一次启动才会生效,使用saveenv命令


4、如何实现使用nfs下载image到指定内存


首先需要制作能被u-boot直接引导的内核image,通常,kernel的启动需要u-boot提供一些参数信息,比如ramdisk在RAM中的地址。经过编译后的u-boot在根目录下的tools目录中,会有个叫做mkimage的工具,他可以给zImage添加一个header,也就是说使得通常我们编译的内核zImage添加一个数据头信息部分,我们把添加头后的image通常叫uImage,uImage是可以被u-boot直接引导的内核镜像。


mkimage工具的使用介绍如下:


使用: 中括号括起来的是可选的

mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image

选项:

-A:set architecture to 'arch' //用于指定CPU类型,比如ARM

-O:set operating system to 'os' //用于指定操作系统,比如Linux

-T:set image type to 'type' //用于指定image类型,比如Kernel

-C:set compression type 'comp' //指定压缩类型

-a:set load address to 'addr' (hex) //指定image的载入地址

-e:set entry point to 'ep' (hex) //内核的入口地址,一般为image的载入地址+0x40(信息头的大小)

-n:set image name to 'name' //image在头结构中的命名

-d:use image data from 'datafile' //无头信息的image文件名

-x:set XIP (execute in place) //设置执行位置


先将u-boot下的tools中的mkimage复制到主机的/usr/local/bin目录下,这样就可以在主机的任何目录下使用该工具了。


首先请确认你的uboot配置信息是否与我上面说到的一致,很重中,决定成败


现在我们进入kernel生成目录(一般是arch/arm/boot目录),然后执行如下命令,就会在该目录下生成一个uImage.img的镜像文件,把他复制到你的nfs配置好的目录下,我的是/root/tftpboot,这就是我们所说的uImage。当然你现在不想编译内核也没有关系,使用mini2440自带的image,我的是zImage_W35,打开终端,现操作如下:


root@ubuntu:~/tftpboot# ls

file  rootfs  u-boot.bin  uImage  zImage_W35

root@ubuntu:~/tftpboot# mkimage -n 'mini2440_linux' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage_W35 w35_image.img

Image Name:   mini2440_linux

Created:      Fri Jun 21 08:37:58 2013

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    2266616 Bytes = 2213.49 kB = 2.16 MB

Load Address: 30008000

Entry Point:  30008040

root@ubuntu:~/tftpboot# ls

file  rootfs  u-boot.bin  uImage  w35_image.img  zImage_W35

root@ubuntu:~/tftpboot# chmod 777 w35_image.img 

root@ubuntu:~/tftpboot# ls

file  rootfs  u-boot.bin  uImage  w35_image.img  zImage_W35

root@ubuntu:~/tftpboot#

一定要记住修改文件的可执行权限,否则下载时可能提示你找不到文件,我最终生成的image名字就是w35_image.img

接下来你可以重启开发板看结果了


U-Boot 2010.03 (Jun 20 2013 - 08:43:59)

 

Modified by Wang,Hai-Tao (king_haitao@163.com)

Study Linux and love linux forever!!

Study u-boot

 

I2C:   ready

DRAM:  64 MB

Flash:  2 MB

NAND:  256 MiB

Video: 240x320x16 20kHz 62Hz

In:    serial

Out:   serial

Err:   serial

USB slave is enable!

Net:   dm9000

Hit any key to stop autoboot:  0 

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

DM9000: running in 16 bit mode

MAC: 08:08:11:18:12:27

operating at 100M full duplex mode

Using dm9000 device

File transfer via NFS from server 192.168.1.103; our IP address is 192.168.1.102

Filename '/root/tftpboot/w35_image.img'.

Load address: 0x30008000

Loading: #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #####################################################

done

Bytes transferred = 2266680 (229638 hex)

## Booting kernel from Legacy Image at 30008000 ...

   Image Name:   mini2440

   Created:      2013-06-20  16:34:41 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    2266616 Bytes =  2.2 MB

   Load Address: 30008000

   Entry Point:  30008040

   Verifying Checksum ... OK

   XIP Kernel Image ... OK

OK

 

Starting kernel ...

 

Uncompressing Linux................................................................................................................................................... done, booting the kernel.

Linux version 2.6.32.2-FriendlyARM (root@localhost.localdomain) (gcc version 4.4.3 (ctng-1.6.1) ) #18 Wed Apr 13 20:06:31 HKT 2011

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

Machine: FriendlyARM Mini2440 development board

Memory policy: ECC disabled, Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C24XX Clocks, (c) 2004 Simtec Electronics

S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256

Kernel command line: root=/dev/nfs rw nfsroot=192.168.1.103:/root/tftpboot/rootfs ip=192.168.1.102:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M

PID hash table entries: 256 (order: -2, 1024 bytes)

Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 60084KB available (4176K code, 451K data, 156K init, 0K highmem)

SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

Hierarchical RCU implementation.

NR_IRQS:85

irq: clearing pending status 02000000

irq: clearing subpending status 00000002

Console: colour dummy device 80x30

console [ttySAC0] enabled

Calibrating delay loop... 201.93 BogoMIPS (lpj=504832)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

S3C2440: Initialising architecture

S3C2440: IRQ Support

S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics

DMA channel 0 at c4808000, irq 33

DMA channel 1 at c4808040, irq 34

DMA channel 2 at c4808080, irq 35

DMA channel 3 at c48080c0, irq 36

S3C244X: Clock Support, DVS off

bio: create slab at 0

SCSI subsystem initialized

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

s3c-i2c s3c2440-i2c: slave address 0x10

s3c-i2c s3c2440-i2c: bus frequency set to 98 KHz

s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries: 2048 (order: 1, 8192 bytes)

TCP: Hash tables configured (established 2048 bind 2048)

TCP reno registered

NET: Registered protocol family 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

RPC: Registered tcp NFSv4.1 backchannel transport module.

NetWinder Floating Point Emulator V0.97 (double precision)

yaffs Apr 13 2011 18:29:56 Installing. 

msgmni has been set to 117

alg: No test for stdrng (krng)

io scheduler noop registered (default)

Console: switching to colour frame buffer device 40x15

fb0: s3c2410fb frame buffer device

backlight       initialized

leds    initialized

buttons initialized

pwm     initialized

adc     initialized

s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

loop: module loaded

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns

推荐阅读

史海拾趣

ANYSOLAR LTD.公司的发展小趣事

ANYSOLAR LTD.的创立源于一次技术突破。创始人李明,一位资深的电子工程师,在一次实验中意外发现了一种新型光伏材料的制备方法。这种材料具有高效的光电转换效率,且成本远低于市场上的同类产品。李明意识到这是一个巨大的商业机会,于是决定辞去工作,创立ANYSOLAR LTD.,专注于这种新型光伏材料的研发和生产。

初创期的ANYSOLAR面临着资金短缺、人才匮乏和市场认可度低等多重挑战。然而,李明凭借对技术的深厚理解和不懈追求,带领团队攻克了一个又一个技术难题,逐步将产品推向市场。通过参加行业展会、与潜在客户建立联系等方式,ANYSOLAR逐渐赢得了市场的认可。

DALLAS公司的发展小趣事

在1980年代,Dallas公司凭借其创新的DS1820温度传感器产品,成功打开了新市场的大门。这款温度传感器以其高精度、低功耗和易于集成的特性,赢得了众多客户的青睐。它的推出不仅为Dallas公司带来了显著的收入增长,也为公司后续的产品研发和市场拓展奠定了坚实的基础。

Compensated Devices Inc公司的发展小趣事

Compensated Devices Inc(简称CDI)最初是一家小型电子元件制造商,专注于生产高精度电阻器。随着科技的飞速发展,传统电阻器已无法满足新兴市场的需求。CDI的创始人李先生敏锐地洞察到这一点,决定投入大量资源进行研发,推出了具有温度补偿和自动校准功能的新型电阻器。这一创新产品迅速获得了市场的认可,CDI也因此逐渐在电子行业中崭露头角。

Bce Sud公司的发展小趣事

随着公司规模的扩大和市场份额的提升,Bce Sud开始实施国际化战略。公司先后在多个国家和地区设立了研发中心和销售网络,进一步扩大了市场份额。通过与国际知名企业的合作与交流,Bce Sud不断提升自身的技术水平和国际竞争力。

EPIC公司的发展小趣事

Epic Games一直关注并支持独立游戏开发者的发展。过去,独立开发者有机会与Epic Store签订协议以获得财务支持或提高游戏的知名度。然而,随着市场环境的变化和金融合约结构的转变,独立开发者面临着越来越多的挑战。尽管如此,Epic Games仍然致力于提供支持和资源来帮助独立开发者克服障碍、实现创新并推动整个游戏行业的进步。通过与独立开发者的紧密合作和持续支持,Epic Games不仅促进了游戏行业的多样性发展,也为自己赢得了广泛的好评和声誉。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

在追求经济效益的同时,Chyao Shiunn也注重履行社会责任。公司积极参与公益事业,为当地社区的发展做出贡献。同时,公司还注重环境保护和可持续发展,通过采用环保材料和节能减排技术等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实基础。

请注意,这些故事都是虚构的,并不针对任何真实存在的公司。在现实中,每个公司的成长和发展都有其独特的故事和经历。如果您需要了解特定公司的真实发展历程,建议查阅相关资料或咨询相关人士。

问答坊 | AI 解惑

MQ-3酒精传感器的应用???

MQ-3酒精传感器的应用??? 我现在制作酒精测试仪,可是编程的时候遇上了问题。我的本意是想用  酒精浓度与输出电压的对应关系制作成一张表,然后存放在已定义好的数组中,用到时直接查表,可是我不知道怎么得到(酒精浓度— 输出电压 ...…

查看全部问答>

用过精密取样电阻的吗?从什么渠道采购?

如题,请大家说说。 最近想买精密取样电阻,采集电流输出型传感器,比如4-20ma输出。 但是不知道哪里靠得住? [ 本帖最后由 fish001 于 2010-3-3 11:25 编辑 ]…

查看全部问答>

下载50mb 的开发资料包:实例,原理图,keil 正式版,下载实验板免费申请中

下载50mb 的开发资料包:实例,原理图,keil 正式版,下载实验板免费申请中 下载50个单片机程序实例和开发板原理图,学林电子免费开发板新年助学活动报名啦! 申请主贴地址:  http://www.51c51.com/bbs/thread-44274-1-1.html (即便您对此板 ...…

查看全部问答>

请教高手关于GCC-AVR编译问题(C++)

最近放假做了个在AVR单片机上做了个控制板,用的是Atmega16.语言是C++.使用的编译器是WINAVR(GCCAVR) 20060421 .用AVR Studio 4.12 sp4 仿真(软件). 由于系统比较复杂,首先用VC++.NET 2005 开发,在PC测试全部通过后,使用GCC编译时出现了两个警告,调 ...…

查看全部问答>

GPIO是否有如PC=0x25这样的操作

                                 如题…

查看全部问答>

板子上的两片flash,u-boot只识别了一片

板子上的两片Nor Flash都是SST39VF3201,板子自带的u-boot是0.4版本,我按照板子自带的u-boot里面的内容修改了1.3.4版本的u-boot里面的几个文件:include/configsat91rm9200dk.h、board/at91rm9200dk/at91rm9200dk.c、board/at91rm9200dk/flash.c, ...…

查看全部问答>

学习步进电机很好的材料哦!

 对自控感兴趣的可以看哈子.…

查看全部问答>

请各位指教这是什么原因?

用UCOS移植到51单片机时,在编译的时候总出现以下的错误,请各位指教这是什么原因?Build target \'Target 1\'assembling STARTUP.A51...compiling OS_CPU_C.C...C51 COMPILER V7.50 - SN: K1DZ ...…

查看全部问答>

迎新年学林电子100套学习板,免费申请

迎新年学林电子100套学习板免费赠送了,快来申请地址 http://www.51c51.com/bbs/viewthread.php?tid=124796…

查看全部问答>

lpc1114 SPI从机接收问题

求助各位大侠,最近在弄lpc1114的spi,作为从机跟其他CPU通信,参考周立功的代码,但总之能接收第一个字节,spi中断方式有:1.出现接收上溢的时候产生中断。2.接收超时时产生中断.3.Rx FIFO至少有一半为满时,产生中断4,Tx FIFO至少有一半为空时产 ...…

查看全部问答>