历史上的今天
今天是: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 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
史海拾趣
|
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 (即便您对此板 ...… 查看全部问答> |
|
最近放假做了个在AVR单片机上做了个控制板,用的是Atmega16.语言是C++.使用的编译器是WINAVR(GCCAVR) 20060421 .用AVR Studio 4.12 sp4 仿真(软件). 由于系统比较复杂,首先用VC++.NET 2005 开发,在PC测试全部通过后,使用GCC编译时出现了两个警告,调 ...… 查看全部问答> |
|
板子上的两片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套学习板免费赠送了,快来申请地址 http://www.51c51.com/bbs/viewthread.php?tid=124796… 查看全部问答> |
|
求助各位大侠,最近在弄lpc1114的spi,作为从机跟其他CPU通信,参考周立功的代码,但总之能接收第一个字节,spi中断方式有:1.出现接收上溢的时候产生中断。2.接收超时时产生中断.3.Rx FIFO至少有一半为满时,产生中断4,Tx FIFO至少有一半为空时产 ...… 查看全部问答> |




