s3c6410之编译开发板内核

开发板:友善之臂Tiny6410

宿主机:Ubuntu 11.10

一. 使用的是linux-3.2.10,源码部署在/usr/src/linux-3.2.10


二.进入目录
  make distclean

三.选择参考配置文件。用适合于4.3寸屏的config_mini6410_n43,又是通用。
  make menuconfig ARCH=armCROSS_COMPILE=arm-linux-
ARCH=arm:表示现在编译的是arm架构的内核
CROSS_COMPILE=arm-linux-  :表示使用的工具链是交叉编译工具链。
使用默认的配置就可以了。

四.编译内核
   make uImage ARCH=armCROSS_COMPILE=arm-linux-
PS:1.如果系统中没有安装mkimage工具,在编译中会提示mkimage命令找不到。u-boot中mkimage是用来产生u-boot格式映像文件的,所以从编译之后的u-boot源代码中把mkimage复制到/usr/local/bin下。
编译需要十几分钟,生成的uImage位于arch/arm/boot下。
2. 需要把 FriendlyARM公司的一个FriendlyARM.cpio脚本复制到内核目录的/scripts下。

五.Uboot命令
   可以参考:http://blog.sina.com.cn/s/blog_80fd855d0100ysfn.html
这里用到了:

1.go:

go addr [arg ...]

     - start application at address 'addr'

        passing 'arg' as arguments

go命令可以执行应用程序。

第1个参数是要执行程序的入口地址。

第2个可选参数是传递给程序的参数,可以不用。

2、bootm

bootm [addr [arg ...]]

   - boot application image stored in memory

         passing arguments 'arg ...'; when booting a Linux kernel,

          'arg' can be the address of an initrd image

bootm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。

第1个参数addr是程序映像的地址,这个程序映像必须转换成U-Boot的格式。

第2个参数对于引导Linux内核有用,通常作为U-Boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数(缺省情况下传递bootargs环境变量给内核)。

附加说明: 要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。起动UBOOTTOOLS制作的压缩LINUX内核, bootm 3200000

3、bootp

bootp [loadAddress] [bootfilename]

bootp命令通过bootp请求,要求DHCP服务器分配IP地址,然后通过TFTP协议下载指定的文件到内存。

第1个参数是下载文件存放的内存地址。

第2个参数是要下载的文件名称,这个文件应该在开发主机上准备好。

附加说明: 通过网络启动,需要提前设置好硬件地址bdinfo打印ARM相关信息

4、tftpboot

tftpboot [loadAddress] [bootfilename]

tftpboot命令可以使用TFTP协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。

第1个参数loadAddress是下载到的内存地址。

第2个参数是要下载的文件名称,必须放在TFTP服务器相应的目录下。

5、nfs

nfs [loadAddress] [host ip addr:bootfilename]

nfs命令可以使用NFS网络协议通过网络启动映像。

用法:

nfs 32000000 192.168.0.2:aa.txt

把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt读入内存0x32000000处。

6、echo

echo [args..]

     - echo args to console; c suppresses newline

echo命令回显参数。

用法:echo $( bootcmd)

7、printenv

printenv

     - print values of all environment variables

printenv name ...

     - print value of environment variable 'name'

printenv命令打印环境变量。

可以打印全部环境变量,也可以只打印参数中列出的环境变量。

8、setenv

setenv name value ...

     - set environment variable 'name' to 'value ...'

setenv name

     - delete environment variable 'name'

setenv命令可以设置环境变量。

第1个参数是环境变量的名称。

第2个参数是要设置的值,如果没有第2个参数,表示删除这个环境变量。

用法:

Uboot> setenv myboard AT91RM9200DK

Uboot> printenv

baudrate=115200

ipaddr=192.168.1.1

ethaddr=12:34:56:78:9A:BC

serverip=192.168.1.5

myboard=AT91RM9200DK

Environment size: 102/8188 bytes

9、Saveenv

保存环境变量

命令将当前定义的所有的变量及其值存入flash中。用来存储变量及其值的空间只有8k字节,应不要超过。

10、run

run var [...]

     - run the commands in the environment variable(s) 'var'

run命令可以执行环境变量中的命令,后面参数可以跟几个环境变量名。

用法:

Uboot> setenv flashit tftp 20000000 mycode.bin\;erase 10020000 1002FFFF\;

cp.b 20000000 10020000 8000

Uboot> saveenv

Uboot> run flashit

11、ping

ping ipaddr

   只能开发板PING主机。

六、用nimicom 串口工具进入一键式菜单界面,按 q 退出一键式菜单,进入u-boot的命令行模式。

nimicom的使用参考:http://blog.sina.com.cn/s/blog_80fd855d0100ysdi.html

七、测试环境变量

设置tmp=test env   :setenv tmptest env

打印                      :printenv tmp

保存                      :saveenv

删除                      :setenv tmp

八、设置环境变量

MINI6410 #printenv                                                            
bootargs=root=ubi0:FriendlyARM-root ubi.mtd=2rootfstype=ubifs  init=/linuxrc c0
bootcmd=nand read.i c0008000 80000 500000;bootmc0008000                       
bootdelay=1                                                                    
baudrate=115200                                                                
ethaddr=08:90:90:90:90:90                                                      
ipaddr=192.168.1.230                                                           
gatewayip=192.168.1.1                                                          
netmask=255.255.255.0                                                          
stdin=serial                                                                   
stdout=serial                                                                  
stderr=serial                                                                  
serverip=192.168.1.100             

九、连接网线,通过路由连接。PING路由和主机。

MINI6410 # ping192.168.1.1                                                    
dm9000 i/o: 0x18000300, id:0x90000a46                                         
DM9000: running in 16 bitmode                                                 
MAC:08:90:90:90:90:90                                                         
operating at 100M full duplexmode                                             
host 192.168.1.1 isalive                                                      
MINI6410 # ping192.168.1.100                                                  
dm9000 i/o: 0x18000300, id:0x90000a46                                         
DM9000: running in 16 bitmode                                                 
MAC:08:90:90:90:90:90                                                         
operating at 100M full duplexmode                                             
host 192.168.1.100 isalive                                                    
MINI6410 #

十、使用tftp下载内核到内存51000000处启动
将uImage复制到 /tftp目录中,重命名为uImage.bin。
MINI6410 # tftp 51000000uImage.bin                                            
dm9000 i/o: 0x18000300, id:0x90000a46                                         
DM9000: running in 16 bitmode                                                 
MAC:08:90:90:90:90:90                                                         
operating at 100M full duplexmode                                             
TFTP from server 192.168.1.100; our IP address is192.168.1.230                
Filename'uImage.bin'.                                                         
Load address:0x51000000                                                       
Loading:#################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        ##############################################################        
done                                                                           
Bytes transferred = 3645072 (379e90hex)                                       
MINI6410 # bootm51000000                                                      
## Booting image at 51000000...                                               
   ImageName:  Linux-3.2.10-MyKernel                                         
   ImageType:   ARM Linux Kernel Image(uncompressed)                         
   DataSize:    3645008Bytes =  3.5MB                                       
   Load Address:50008000                                                      
   Entry Point: 50008000                                                      
   Verifying Checksum ...OK                                                   
OK                                                                             
                                                                               
Starting kernel ... 

由于此时u-boot中还没有设置对挂载文件系统的支持,所以内核启动最终会被挂起。

至此,这一节就算完成了。

夜把花悄悄地开放了,却让白日去领受谢词。 ——泰戈尔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值