原创 SH2A/7203上的uClinux2.6开发笔记

2011-2-25 14:17 1057 4 4 分类: MCU/ 嵌入式
来源:瑞萨单片机论坛
SH7203-uClinux启动过程:
bootloader初始化基本的硬件设备后,跳转到FLASH的0x40000地址,此为内核(head.S)的入口地址。
接下来,内核被复制到SDRAM去,然后执行内核自解压程序。内核自解压程序将内核解压到相关地址,并跳转到那里去启动内核。
(参考sh7203-linux.abs.map) head.S
SH7203-uClinux的编译过程:
内核镜像zImage与bootloader一起编译成一个可执行的二进制文件sh7203-linux.abs.bin,直接将此文件下载到地址0x0即可启动内核。

sh-linux-gcc -c -O2 -m3e -mb hello.c
sh-linux-gcc -o hello -m3e -mb -Wl,-EB -Wl,-elf2flt=-s65536 hello.o

如果出现gcc找不到,应该更新gcc的路径
source /etc/profile

Hardy(8.04) 版本
台湾的官方源速度也相当不错,有时甚至快于内地的:
deb http://tw.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu hardy-proposed main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu hardy-proposed main restricted universe multiverse
加源方法:打开终端-sudo gedit /etc/apt/sources.list
输入密码(你安装系统时设置的用户密码),注意密码不会显示,直接回车
把弹出的里面的内容全部清空,然后把提供的源全部粘贴上去(不含中文)
保存,关闭回到终端
输入sudo apt-get update

ubuntu8.04下nfs问题总结:
按照网上的教程更改之后,出现internal error错误,这是8.04版的BUG。可以修改nfs-kernel-server的源码,然后利用debuild -us -uc重新打包,
再安装,问题就解决了。具体可参考网上教程。
修改完毕,虚拟机可以自己挂自己了,但是开发板无法挂上虚拟机。
原因是virtualbox的网络配置使用了NAT方式,应该改为host interface方式。virtualbox会自动与windows桥接。
此后重新启动虚拟机ubuntu,设置IP地址,注意不要和windows的IP一样,但要在同一个子网内。
检查网络,互相PING通之后,开发板就可以挂载ubuntu了。
ubuntu8.04下nfs服务器挂载开发板
mount -t nfs -o nolock 172.30.4.77:/home/nfsboot /mnt
172.30.4.77为虚拟机ubuntu的IP地址

在目标板上通过NFS复制PC机上较大文件到目标板上的时候遇到的问题:
nfs: server *** not responding, still trying
修改方法:
nfs mount时候出现的NFS崩溃,按照以下的方式mount
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.3:/root/somedir /client
文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/2008716/133207.html
--------------------------------------------------------------------------------------------------
描述:我在arm上通过NFS共享文件时出现下面的错误提示
nfs:server is not responding,still trying
原因分析:NFS 的默认传输协议是 UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象。
解决方法:在客户端改用TCP协议,使用下面的命令,
#mount -t nfs -o nolock -o tcp 192.168.1.161:/opt /opt 

2009-5
uClinux移植到SH7203发生错误
启动bootloader后,超级终端可以打印串口的信息。但是当进入内核时,发生错误"INT_CPU_Address"。有可能是内核无法解压。
2009-6-9
发现是SDRAM未初始化的问题
正确配置SDRAM后,串口能打印内核启动信息。
又发现LCD framebuffer 问题。
重新配置内核,去掉LCD驱动
编译后,内核,文件系统正常启动.

2009-6-17
编译lrzsz
配置命令
CFLAGS=-mb LDFLAGS=-elf2flt CC=sh-linux-gcc ./configure --cache-file=./cache-file.sh
然后make
使用lrz接收文件
lrz -Z
Main板SDRAM配置32位
/* Configure CS3 address space
    Idle Cycles between Write-read Cycles and Write-write Cycles : 0 idle cycles 
    Memory type : SDRAM 
    Data Bus Size : 32-bit size */
// BSC.CS3BCR.LONG = 0x00004600UL; 
// BSC.CS3BCR.LONG = 0x7FFF4600UL; 

// BSC.CS3BCR.LONG = 0x5B6D4600UL; 
BSC.CS3BCR.LONG = 0x24924600;
// BSC.UN2_BSC.SDRAM.REG_CS3WCR.LONG = 0x00006D9AUL;
//BSC.UN2_BSC.SDRAM.REG_CS3WCR.LONG = 0x00006D92UL; /* KB AW Modified Value: */

/* Configure CS3 wait control register
Number of Access Wait Cycles - 5 cycles
External wait input is ignored */

// BSC.UN2_BSC.SDRAM.REG_CS3WCR.LONG = 0x00002892UL;
BSC.UN2_BSC.SDRAM.REG_CS3WCR.LONG = 0x00006481;
// BSC.UN2_BSC.SDRAM.REG_CS3WCR.LONG = 0x00006D9BUL;        

/* Configure SDRAM control register
   Refresh Control :Refresh 
   RMODE :Auto-refresh is performed 
   BACTV :Auto-precharge mode 
   Row address for Area3 :12-bits 
   Column Address for Area3 :9-bits */

// BSC.SDCR.LONG = 0x00000809UL; 
BSC.SDCR.LONG = 0x811; 
// BSC.SDCR.LONG = 0x00001809UL; //AW/KB SLOW bit set

/* Configure Refresh time constant register 
   15.625usec /240nsec = 64 (0x41)cycles per refresh */

// BSC.RTCOR.LONG = 0xa55a0041UL; 
BSC.RTCOR.LONG = 0xa55a0008; 

/* Configure Refresh timer control/status register 
       Initialization sequence start Clock select B-phy/16 = 240nsec
    Refresh count :Once */

// BSC.RTCSR.LONG = 0xa55a0010UL; 
BSC.RTCSR.LONG = 0xa55a009c;

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条