建议使用REDHAT系列:建议选择完全安装,即选择Custom,然后在Package中选择everything。
【以下配置详见最新PDF手册下载(例如:HHCO5272-R1的手册)】
宿主机的网络配置
主要是要安装好以太网卡,对于一般常见的RTL8139网卡,REDHAT7.2可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。然后配置宿主机IP:
ifconfig eth0 192.168.2.32
【注意】
对于REDHAT7.2,它默认的是打开了防火墙,因此对于外来的IP访问它全部拒绝,这样其它网络设备根本无法访问它,即无法用NFS mount它,无法通过TFTP从它下载,无法telnet,ftp它等。因此网络安装完毕后,应立即关闭防火墙。操作如下:
运行setup,选择Firewall configuration,选中No firewall。然后到上一层菜单选择System services,去掉ipchains和iptables两项服务。最后退出setup。
其实,在安装REDHAT7.2/3时,就要求选择Custom定制安装,其中由一项就是要求选择No Firewall,这样的话,启动后,就不需要执行setup来设置防火墙了。还有,REDHAT在这里有个BUG,即无论上次你进入Firewall configuration选择什么,每次再次进入时它都显示High,这是REDHAT显示的BUG,其实防火墙已经关闭了。
配置NFS
运行linuxconf,在config选项下选Server tasks,选中Exported File systems(NFS),然后选择Add Directory,加入根目录/,然后Accept。系统就会输出根目录允许NFS mount。
下一步再选择Control项下面Control panel下的Control Service activity,然后选择nfs enabled,然后start。配置好后的界面显示其中nfs必须为: Automatic Running。
【注意】
这里建议把ipchains和iptables都取消其自动启动的状态。
最后,在Control项下面Control panel下选择Activate configuration,则弹出界面,提示系统配置的改动,选择"Do it",最后退出时则完成NFS配置。
配置完成后,可用如下办法简单测试一下NFS是否配置好了:
在宿主机上自己mount自己,看是否成功就可以判断NFS是否配好了。例如在宿主机/目录下执行:
mount 192.168.2.32:/ /mnt
然后到/mnt/目录下看是否可以列出/目录下的所有文件和目录,可以则说明mount成功,NFS配置成功。
配置TFTP服务器
参见下面第二点介绍。
【注意】
安装完华恒uClinux软件光盘后,不要make xconfig,直接make即可。加入驱动等修改内核的操作都不必make xconfig,除非要更改处理器平台,例如移植到MCF5407等才需要make xconfig。其实这个操作不过就是修改linux/.config和linux/include/linux/autoconfig.h中的宏设置。完全可以由手工完成。
2、关于gdbtftpflash烧写
【注意】
烧写必须接百兆以太网接口,对于多以太网板的10M口是不能用来烧写的。
在一个Linux TTY终端执行
./flash
然后立刻切换到另一个TTY终端启动的minicom下去查看信息
Reading image.bin from 192.168.2.46 to 0x00100000
TFTP download successful
或者信息如下:
ICMP: Port unreachable
ICMP: Port unreachable
ICMP: Port unreachable
TFTP could not make connection to server
Errors in TFTP download
Read 1004740 bytes (1963 blocks)【这才是关键所在,前面的信息都无用,只要这里读到的字节数和宿主机上/tftpboot/目录下的image.bin文件的大小一致就表明TFTP下载成功了!】
>>>>>>>>>> Init mflash
>>>>>>>>>> Init mflash Successfully
********** File size : 0xF54C4 bytes
********** Address base : 0x0
********** Manufacturer ID 1
********** Device ID 2249
********** Sector 0 [FFC00000] (0-unprotect, 1 protect):0
********** Sector 1 [FFC04000] (0-unprotect, 1 protect):0
********** Sector 2 [FFC06000] (0-unprotect, 1 protect):0
********** Sector 3 [FFC08000] (0-unprotect, 1 protect):0
********** Sector 4 [FFC10000] (0-unprotect, 1 protect):0
********** Sector 5 [FFC20000] (0-unprotect, 1 protect):0
********** Sector 6 [FFC30000] (0-unprotect, 1 protect):0
********** Sector 7 [FFC40000] (0-unprotect, 1 protect):0
********** Sector 8 [FFC50000] (0-unprotect, 1 protect):0
********** Sector 9 [FFC60000] (0-unprotect, 1 protect):0
********** Sector 10 [FFC70000] (0-unprotect, 1 protect):0
********** Sector 11 [FFC80000] (0-unprotect, 1 protect):0
********** Sector 12 [FFC90000] (0-unprotect, 1 protect):0
********** Sector 13 [FFCA0000] (0-unprotect, 1 protect):0
********** Sector 14 [FFCB0000] (0-unprotect, 1 protect):0
********** Sector 15 [FFCC0000] (0-unprotect, 1 protect):0
********** Sector 16 [FFCD0000] (0-unprotect, 1 protect):0
********** Sector 17 [FFCE0000] (0-unprotect, 1 protect):0
********** Sector 18 [FFCF0000] (0-unprotect, 1 protect):0
********** Sector 19 [FFD00000] (0-unprotect, 1 protect):0
********** Sector 20 [FFD10000] (0-unprotect, 1 protect):0
********** Sector 21 [FFD20000] (0-unprotect, 1 protect):0
********** Sector 22 [FFD30000] (0-unprotect, 1 protect):0
********** Sector 23 [FFD40000] (0-unprotect, 1 protect):0
********** Sector 24 [FFD50000] (0-unprotect, 1 protect):0
********** Sector 25 [FFD60000] (0-unprotect, 1 protect):0
********** Sector 26 [FFD70000] (0-unprotect, 1 protect):0
********** Sector 27 [FFD80000] (0-unprotect, 1 protect):0
********** Sector 28 [FFD90000] (0-unprotect, 1 protect):0
********** Sector 29 [FFDA0000] (0-unprotect, 1 protect):0
********** Sector 30 [FFDB0000] (0-unprotect, 1 protect):0
********** Sector 31 [FFDC0000] (0-unprotect, 1 protect):0
********** Sector 32 [FFDD0000] (0-unprotect, 1 protect):0
********** Sector 33 [FFDE0000] (0-unprotect, 1 protect):0
********** Sector 34 [FFDF0000] (0-unprotect, 1 protect):0
xxxxxxxxxx Program sector 0 : Read Fill Erase Program End
xxxxxxxxxx Program sector 1 : Read Fill Erase Program End
xxxxxxxxxx Program sector 2 : Read Fill Erase Program End
xxxxxxxxxx Program sector 3 : Read Fill Erase Program End
xxxxxxxxxx Program sector 4 : Read Fill Erase Program End
xxxxxxxxxx Program sector 5 : Read Fill Erase Program End
xxxxxxxxxx Program sector 6 : Read Fill Erase Program End
xxxxxxxxxx Program sector 7 : Read Fill Erase Program End
xxxxxxxxxx Program sector 8 : Read Fill Erase Program End
xxxxxxxxxx Program sector 9 : Read Fill Erase Program End
xxxxxxxxxx Program sector 10 : Read Fill Erase Program End
xxxxxxxxxx Program sector 11 : Read Fill Erase Program End
xxxxxxxxxx Program sector 12 : Read Fill Erase Program End
xxxxxxxxxx Program sector 13 : Read Fill Erase Program End
xxxxxxxxxx Program sector 14 : Read Fill Erase Program End
xxxxxxxxxx Program sector 15 : Read Fill Erase Program End
xxxxxxxxxx Program sector 16 : Read Fill Erase Program End
xxxxxxxxxx Program sector 17 : Read Fill Erase Program End
xxxxxxxxxx Program sector 18 : Read Fill Erase Program End
********** Verify Complete
下面板子开始重启。
【注意】
一定要看到这些Read Fill Erase Program End信息才表示烧写进去了,前面
********** Sector 0 [FFC00000] (0-unprotect, 1 protect):0等只是显示FLASH的扇区分布,
并没有进行烧写,只有看到Read Fill Erase Program End信息才表示在进行烧写。
在minicom中用ctrl+a,然后按b,接着用上下箭头,可以翻看前面的信息,从而查看出了什么错误。例如,TFTP连接失败的信息就要前翻来查看,信息如下:
Unable to locate 192.168.1.46
Errors in TFTP download.
Read 0 bytes (0 blocks)
这就要查看宿主机(即TFTP服务器配置是否成功)。
工作机制:
./flash调用hhco.gdb脚本对CPU进行初始化,(sys-init)
然后指定
target bdm /dev/bdmcf0
load 即下载一个小软件(tftp.elf,约80K)到板子的RAM中,并用c(continue)命令让它跑起来,这时CPU完全由这个小软件接管。这个小软件跑起来后初始化以太网及TFTP协议栈,然后它运行TFTP客户端,从内存中0x00200004(2M+4处)读取gdb脚本放在此处的TFTP服务器IP地址,并从该IP的TFTP服务器PC下载image.bin到板子内存1M地址处,再将其烧写到FLASH上,重启板子,这时引导起来的就是LINUX了。
问:烧写完毕后最后会报如下错误:
Program received signal SIGBUS, Bus error.
0x488 in asm_exception_handler ()
1: x/i $pc 0x488 <asm_exception_handler+4>: orib #84,%d0
注意上述信息并非错误,烧写完退出时都要显示这个信息,并不能表示烧写是否成功。烧写成功与否完全要看minicom端的显示信息来判断。
问:运行./flash时报错,内容如下:
./gdb:error while loading shared libraries:libncurses.so.4:cannot load shared object file:No such file or directory.
这是怎么回事呢?
答:这是由于宿主机REDHAT安装时不完全,不支持DEVELOPMENT工具,如gcc,gdb等工具,导致系统没有安装运行这些工具所需的共享库。建议重新完全安装系统。
3、 关于TFTP服务器设置
其实TFTP服务器可以是和板子相连的局域网内任意一台开通了TFTP服务的LINUX PC机,即板子可以从任意一台TFTP服务器下载IMAGE文件并进行烧写,当然首先要检查IP是否匹配及连线是否正确。但若将LINUX宿主机(即用串口线连接的那一台LINUX PC)同时开通TFTP服务,这样就不必占用多台机器。默认完全安装后的REDHAT的TFTP服务是没有开通的,要自己手工开通。
开通宿主机上的TFTP服务,对于REDHAT6.x,可以在宿主机上:
vim /etc/inetd.conf
查找tftp,若发现前面有#就表示这一行被注释掉了,即服务没有打开,去掉#就打开了TFTP服务,然后重启宿主机即可。
对于REDHAT7.2,则在宿主机上执行setup,选择System services,将其中的tftp一项选中(出现 [*]表示选中),并去掉ipchains和iptables两项服务(即去掉它们前面的*号)。然后还要选择Firewall configuration,选中No firewall。最后,退出setup,执行如下命令以启动TFTP服务:
service xinetd restart
配置完成后,建议简单测试一下TFTP服务器是否可用,即自己tftp自己,例如在宿主机上执行:
cd /
cp /HHCO5272-R1/image/image.bin /tftpboot/
tftp 192.168.2.32
tftp>get image.bin
若出现如下信息:
Received 634732 bytes in 0.7 seconds
就表示TFTP服务器配置成功了。若弹出信息说:Timed out,则表明未成功,需要按照上述步骤重新检查一遍。
或者用如下命令查看tftp服务是否开通:
netstat -a|grep tftp
完成上述配置工作后,就可以开始使用该以太网烧写工具了。
4、BDM与重启问题
安装bdm驱动模块,以HHCO5272-R1为例:
1. cd HHCO5272-R1/bdm
2. insmod linux-bdm.o 【可将此句写入/etc/rc.d/rc.local文件中,如:
/sbin/insmod /HHCO5272-R1/bdm/linux-bdm.o,这样每次PC启动都会自动执行,否则每次启动宿主机都要执行这一句】
3. ./MAKEDEV 【在/dev/下创建设备bdmcf0,只要执行一次】
【注意】
在insmod时有可能出现.o文件与内核版本不匹配现象,这时只要重编该模块驱动即可。具体请参阅下面第31条。
还有,BDM线的长度不能加长,否则使用时会报"bdm not open"。
问:板子刚拿到,一加电就不启动,运行指示灯不闪,minicom什么信息也没有,怎么回事?
答:这是因为插了BDM卡,若不插BDM卡,板子就可以正常启动了。
从软件使用者的角度来说,插了BDM后,核心板的reset键就失效,所以板子加电后没有收到reset信号,所以板子不能启动。这时要板子让板子上的软件系统启动运行,可以先执行一下chk,然后立刻退出则板子就会自动重启。
cd chk
./chk
>>>x
当板子启动后,可以通过minicom接收命令,则要重启就直接在minicom下键入reboot即可重启,这时按reset键无效。若不插BDM则板子的reset按键是有效的。
有时,,执行chk时报错:
device busy表示有其它程序在使用BDM
用ps -A
看看是否有其它程序在使用BDM,例如gdb(即gdbtftpflash下的./flash)或者chk,
若提示device not found,则表明没有安装驱动linux-bdm.o
5、板子死了?
判断板子是否死机的标准不是minicom是否可以输入等,最可信的标准就是看核心板上的运行指示灯是否还正常的闪烁,若不再闪了,必死无疑。有时串口可以打印输出信息,但用户却无法输入命令,这经常是由于操作者手上静电太高导致串口工作异常。这时建议给板子断电,把核心板和底板以及串口线等都重新拔插一下再加电重启试试;或者换一台PC,或者用telnet使用网络终端。
6、TFTP下载与RAM版本问题
用bootloader下载RAM内核,总是报错:
KERNEL: Bad trap from supervisor state, vector=4
CURRENT PROCESS:
COMM=swapper PID=1
TEXT=00100000-00156e6c DATA=00000000-0016685c BSS=0016685c-0017d7f0
USER-STACK=00000000 KERNEL-STACK=0021d000
......
答:
因为TFTP采用的是udp传输的,
而我们的板子是通过一个小HUB跟局域网联在一起的,
可能在传输中有些包丢失了,或者是在传输中有些
数据出现错误,因此出现RAM版的不能用。后来单独把板子跟一台计算机的网卡相连,
或者都接到同一个HUB上,就不会有问题了。
有时烧写完后板子启动时回出现如下错误:
Unable to open an initial console.
这种现象有多种原因可能导致出现,其中就有可能是这里所提的烧写错误所致。
7、BUSS ERROR的问题
记住出错时打印出的PC指针值,将linux/linux
用m68k-elf-objdump -D linux >tt
vim tt
反汇编后查看该PC地址处在什么函数调用内,
从而作进一步定位。
用chk单步跟踪,(fp命令)
建议阅读chk源代码,可以根据自己的需要定制自己的调试命令。
所有可用的BDM操作都在bdm/下的一个bdm.h文件中。
8、硬件扩展
问:CN5的复用脚p19,p23,p25是系统宽度总线控制信号,留给 用户,系统没有用吗?那么复位期间如何确定总线宽度?
回答:上电的时候作为系统宽度总线控制信号;但是上电结束开始运行之后,就变成SPI信号线了,您可以使用。问:普通usb口只用d+ d_两条信号线,而5272增加了转出去的信号线:usb-rp,usb-tp....(pa{6:0}),用户能否用其第一功能?
回答:5272本身带有usb收发器,5272可以让您选择是否选择外部usb收发器(通过配置内部寄存器来选择)。建议选用外部USB收发器。注意!是收发器,不是控制器!USB控制器是在5272里面的。
【注】cn5,cn6只是做简单的扩展,而你可以通过自己设计底板(华恒底板都已经在手册里面有原理图了!),从而在cn1,,cn2,cn3使用信号。cn1,cn2,cn3上的管脚对应的信号原理图上都有。其中地址线在cn1的1~45(奇数脚),数据线在cn2的2~64(偶数脚)。ddat[3:0]和DTEA都在cn3上,是用于接BDM口的。具体使用请参考5272处理器手册。
USB[3:1]管脚是从一个外接的USB收发芯片pdiusb11上接出的。而TX_P~RX_N是以太网隔离变压器的输出线。cpuclk的频率为66Mhz,无驱动。
关于系统I/O:
MCF5272共提供48个通用IO引脚,它们可以分为3个16位PORT,即PORTA、PORTB、PORTC。其中PORTA,PORTB对应的控制寄存器来实现与其它信号引脚的复用。Port C没有PCCNT寄存器,它只能在工作为外总线16位模式时作为16位的I/O口线使用,即它与D[0~15]复用,只有16位外总线模式时,因为只用高16位D[16~31],这时D[0~15]就为PC[0~15]。另外的一个端口Port D不能被用做I/O线。
系统剩余GPIO资源(以HHCO5272-R1为例):
PA7~PA14(8根引脚);PB4~PB7(4根引脚);
若去掉USB接口,则PA[6:0]可用(7根引脚)。
所以一般的去掉USB,通用IO引脚可用的有8+4+7=19根。
串口0所占用的PB[3:0](4根引脚),其中PB0/1为URT0_TxD/URT0RxD,PB2/3为CTS/RTS。
若去掉串口0的CTS/RTS,又多2根,即可19+2=21根。
若整个去掉串口0,又多两根,即最多21+2=23根。
9、串口2检测
将板子的串口2和宿主机的串口1连接起来,在宿主机的一个TTY启动minicom,另一个TTY执行chk
./chk
>>>fr colilo2.bin e00000 【下载到RAM中0x00e00000地址处】
>>>fg xx e00400 【从0x00e00400地址处开始执行,加上0x400是要跳过前面1024个字节的ramvect】
代码下到板子RAM中,然后用fg将其激活跑起来后,CPU就由那个代码控制了,这时就不要在chk中输入任何命令了。不要在chk中执行退出(x),否则板子立即reset,下载到RAM中的内容就丢了。【注意】没有fg之前,核心板上运行指示灯(LEDK1)是不亮不闪的。一旦fg xx e00400后就应该亮闪起来。这是判断下载软件是否跑起来的唯一标准,与串口是否打印完全无关。若minicom没有打印信息,就只能说明串口2是坏的。
10、开发/使用注意
◇无论编译内核还是自己的某一个应用程序都必须在uClinux目录下进行编译make,在其它目录下编译都会报错。◇当板子插了网线时,核心板上的百兆以太网连接和碰撞指示灯(LEDL2)就会亮起来,若这时板子ping一台PC机或者一台PC机ping板子的话,LEDL2灯就会闪烁起来。若LEDL2不亮,可能是以太网插口接触不好所致,用力插紧即可。
◇HHCO5272-R1提供了串口2可用于作MODEM拨号,需要把uClinux/user/pppd/、chat/和diald/三个目录加入编译,并编写正确的拨号脚本和配置文件。华恒提供完备的PPP拨号软件包。
◇HHCO5272-R1板上采用的是ROMFS的文件系统,它是只读的。可以扩展支持JFFS/JFFS2文件系统,它可读可写。华恒提供完备的JFFS/JFFS2支持软件包。
◇在用ddd-5272调试应用程序时,若看不到代码,是因为没有加-g的编译参数;若代码能看到,但是是在run的时候提示BDM not Open! 这是run命令的问题,运行时不要用run,而用continue命令,即c。
◇MCF5272不支持外设的DMA,它只有内部DMA,为FEC所用。
◇要在系统启动时自动执行用户自己的应用程序,就必须修改uClinux/romfs/etc/rc文件,这是个启动的脚本文件,它的作用就相当于WINDOWS98下的autoexec.bat,这个脚本文件中的每一句都是在shell下可直接执行的命令。例如用户移植了WEB SERVER boa,要启动就执行boa,就在这个rc文件的最后加一句boa&,然后到uClinux下执行make,然后./flash烧写板子即可。
◇板子IP的修改:
可以用ifconfig/route(2.4内核不需要route命令)命令来修改板子启动后的IP,但这个修改在重启后无法保存。因为板子IP的指定是在其ROMFS文件系统的/etc/rc文件中指定的,如下:
ifconfig eth0 192.168.2.112
route add -net 192.168.2.0
要永久的改变板子的IP,就要在宿主机上修改uClinux/romfs/etc/rc文件中对应的IP设置内容,然后在uClinux下重新编译,然后重新烧写。但这样做的问题在于无法做到动态修改IP并保存。要实现这种功能,就必须在板子上实现文件存储功能。实现的机制有许多,如flatfsd、JFFS/JFFS2文件系统等。对于板子上的存储机制,华恒提供完整的JFFS/JFFS2软件包销售,可大大加快用户的开发进度及产品上市时间。
11、启动失败
客户问:HHCF5272-LCD-IDE-R1套件中:把image.bin写到flash后,应该可以从板子启动进入uClinux中,但是它会出现一个错误是kernel panic attempted to kill init!
答复:都是usb_init惹的祸
这样修改:
vim uClinux/linux-2.4.x/drivers/char/mem.c
去掉usb_init一行,然后重新编译烧写就没有问题了。
12、串口2问题
◇客户问:
一个简单测试程序,向/dev/ttyS0发送数据,波特率设为38400,在PC机下顺利接收到。利用5272开发板上的串口1发送,另一端在minicom下,设为相同的波特率,能接收到数据,但是相同的程序,只修改为/dev/ttyS1确收不到任何数据,
答复:经次测试,发现是缺少了对串口2占用的PD口的初始化。
对于HHCF5272-R1,更新的文件sysinit.c,
将它覆盖到uClinux/linux/arch/m68knommu/platform/5272/目录下,
重新编译烧写即可。
对于HHCF5272-LCD-IDE-R1 ,将附件colilo.bin覆盖到uClinux/colilo/目录下,重新编译烧写即可。
13、扩大RAM盘的方法
有客户问到增大HHCF5272-R1板子上的/var/目录大小的问题,
这个目录是RAM盘,可读可写。
它的大小是在uClinux/romfs.mk中指定的:
例如要指定为2M大小的RAM盘:
则加入如下一句:
RAMFSy = $(USER)/ramimage/ramfs2048.img
即可。
【注意】
RAM盘太大好像会引起系统死机。
14、关于编译重烧启动时出现“unable to open an initial console”问题
解决办法:
修改uClinux/vendor/HHtech/M5272/Makefile,
将其中的genromfs改为/usr/local/bin/genromfs即可。
15、关于BDM驱动“ kernel-module version mismatch”问题
现象:在bdm/driver/linux下执行make后,insmod linux-bdm.o时出现如下错误:
linux-bdm.o: kernel-module version mismatch
linux-bdm.o was compiled for kernel version 2.4.17
while this kernel is version 2.4.5.
解决办法:
1、要注释MODVERSIONS=-DMODVERSIONS
即:#MODVERSIONS=-DMODVERSIONS
2、修改bdm/driver/linux/Makefile中的CFLAGS一行为如下:
CFLAGS = -Wall -g -O -pipe -I/usr/src/linux-2.4/include -I.. -DMODULE -D__KERNEL__ $(MODVERSIONS)
这样编译就不会有内核版本不匹配的问题了
