首 页 关于华恒 产品服务 技术支持 联系我们 诚聘英才  
产品服务
嵌入式开发板
行业解决方案
OEM & ODM
教学实验系统
软件产品服务
嵌入式应用模块
培训服务
相关资料
 
HHDREZ328-R2嵌入式Linux开发板常见问题解答
1、华恒该开发板到底能用来做什么?
该开发板实际上是为客户提供一个二次开发的软硬件平台。硬件板子,OS,常用设备的驱动及开发上层应用所需的接口API都已提供并有样例供参考,如:GUI,网口通信,串口通信,手写板输入等。客户只需在该开发板上开发自己所要的上层应用即可。主要的应用方向如:手持设备(PDA,各种掌上测试仪等)、显示终端、游戏终端等。
华恒科技为其龙珠客户已经免费提供了三次系统升级:
第一次升级是应用程序编译器从PIC-COFF升级到ELF格式,从而可以支持大的应用程序;
第二次升级是烧写工具的升级:烧写方式从串口下载升级为以太网TFTP下载,将烧写时间由40分钟缩短为5分钟。
第三次升级是内核升级。采用了目前最新的uClinux版本:即uClinux-dist-20020927.tgz,(20030305刚出);同时移植成功了2.0和2.4两个版本的内核到华恒板上;内核编译器采用m68k-elf-xxx(以前的编译器升级只是应用程序的编译器升级到ELF格式,而内核仍用m68k-coff-xxx格式的。);采用标准的SASH做SHELL,支持RC,支持常用的网络配置命令,支持make menuconfig。总之,彻底摆脱了基于龙珠的老式uClinux版本的种种不便,将其纳入主流通用的uClinux行列中。;光盘安装时直接执行./ucinst即可在根目录下生成HHDREZ328-R2目录,然后直接到uClinux-dist目录下执行make即可,然后用bootloader/下的./flash即可烧写。
鉴于系统多次升级,许多老客户对新系统感到很陌生,现在大概介绍一下系统的区别:
华恒以前提供的uClinux内核是最古老的uClinux版本,因为uClinux就起源于EZ328的uCsimm,然后才移植到目前诸多的处理器平台上。华恒早期提供的uClinux就采用了这个最古老版本,它和现在www.uclinux.org上发布的uClinux-dist都不一样,例如更改IP地址不是在/etc/rc中设置,而是需要修改一个应用程序的代码;还有不支持标准的ifconfig/route命令,用户拿到板子根本就无法获知板子的IP地址,这些诸多不便都是在当今主流的uClinux版本中不可思议的。华恒提供的前两次升级都是在其它方面进行了升级,而内核一直没有升级,直到第三次升级才将其内核彻底纳入主流版本。
目前开发板提供的软件,在光盘安装后,执行./ucinst即可在根目录下生成HHDREZ328-R2目录,然后直接到uClinux-dist目录下执行make即可,不能在其它任何目录执行make,这里的make 将一次编译内核,uC-libc库,及user下所有用户选定的应用程序。
具体的编译过程分析,烧写文件image.bin的形成、如何添加应用程序等等都可参阅HHCF5272-LCD-IDE-R1产品的PDF手册。
以前的应用程序都放在appsrc目录下,现在都在uClinux-dist/user/目录下,以前的ROMFS文件系统目录为romdisk/romdisk/,现在为uClinux-dist/romfs/目录,这个目录里的内容就是以后板子上的内容,其中bin目录下有user/下所有用户选中的应用程序编译后生成的可执行文件、etc目录下则是所有这些应用程序的配置文件(.conf)的存放地。romfs目录在编译的最后由genromfs工具进行打包生成romfs.img,它将拼接在LINUX内核编译生成的二进制文件linux.bin文件的后面,两个文件合成最后的可下载烧写文件image.bin,(这个过程可参阅:uClinux-dist/vendor/Arcturus/uCsimm/Makefile)并自动被复制到/tftpboot/目录下以供烧写用。
整个的编译过程可用重定向操作记录到一个文件中,即在/HHDREZ328-R2/uClinux-dist/下执行:
make > tt
vim tt
就可看到整个的编译过程。

2、不熟悉开发板,开发有困难,华恒不能提供已经开发好的产品吗?
Sorry,华恒只提供开发板,并不生产最终产品。我们一向以技术为主,最终产品涉及太多了…..当然,若客户开发有困难,我们的一大主营业务就是委托设计或技术培训。要使用特殊设备,不会写驱动,没问题,华恒替您搞定,当然,是有偿的了。

3、uc下fork的问题
uclinux系统中由于内存管理的问题,fork与vfork等同,即uclinux系统中没有真正的fork,多进程实际是使用vfork实现的,每次fork完一个进程必须执行exec,父进程等待子进程exec后才继续运行。

4、开发板提供编译器吗?
当然提供了,在我们产品附送的软件安装光盘中提供OS及编译工具及其源代码等。
编译器是gcc。

5、有图形系统吗?
没有图形系统,但我们提供了丰富的GUI 接口API,完全WIN32 API风格,简单易用,且有样例多多。而且在华恒公司在其技术论坛(.org)上将主持发起多项GNU项目,开发商将从中受益多多。
能跑MiniGUI,MicroWindow,tiny-X, QT-embedded吗?
microwindow对系统要求较高,如果使用ez328的处理器,可能速度上会有问题

6、板子功耗多大?适合于做手持设备吗?
200mA,非常适合用于低功耗的手持设备

7、我是一个Linux爱好者,你们开发板适合于我吗?
当然适合啦。华恒这套板子是广大个人爱好者深入研究Linux的最佳平台,亦是大专院校进行教学研究的首选高性价比产品。只要一根串口线及网线,你就可以在这小小的板子上从底层硬件,驱动到上层应用自由驰骋。
另外,华恒公司为了在国内大力推广嵌入式Linux技术的应用及开源思想的普及,对大专院校教学开课装备实验室购买将进行优惠销售。

8、如何在板子启动时运行我自己开发的应用?
修改/HHDREZ328-R2/uClinux-dist/romfs/etc/rc,将你的可执行文件名加到最后,然后到uClinux-dist/目录下执行make,然后重新烧写即可。

9、IP的修改
修改/HHDREZ328-R2/uClinux-dist/romfs/etc/rc中对应的ifconfig eth0 IP即可。若要运行动态修改IP地址,则请阅读手册"FLASH扇区保存IP方式"一节介绍。

10、烧FLASH的问题
烧写前必须先在宿主机上安装PERL模块,才能使用bootloader下的./flash命令进行烧写。就像COLDDIRE系列产品烧写前一定要安装BDM驱动一样。
此外还必须配置好宿主Linux PC机上的TFTP服务。
而且龙珠板烧写FLASH(即执行./flash)经常不成功,一般都要烧几次才成功。这主要是bootloader中以太网驱动的问题。建议烧写时采用纯净的网络环境,最好用交叉网线直连宿主机和开发板进行烧写。
还有要注意的就是minicom设置的波特率的问题:
烧写要求minicom的波特率事先设置为9600。(这个在安装华恒光盘./ucinst就已经自动配好了)若不是,请改为9600,并CTRL-A O,然后保存设置:Save setup as dfl
然后退出minicom,按下板子上的reset键,重新执行./flash烧写。
具体烧写过程中的正确的信息如下:
[root@test bootloader]# ./flash
Initializing 9600 bps
Target board was reset
Initializing 57600 bps
start b_record download
****************
end-b_record download
Header: stuknzJI
Size: 26046
################################ 【这里必须要打出这些#号,否则若一闪而过直接进入minicom,就是有错误,可以按下板子上的reset键复位,然后重新执行./flash烧写】
initializing 9600 bps
** Parameter bits is public, but is marked private in global config file
** Parameter parity is public, but is marked private in global config file
这时自动启动并进入minicom,显示如下信息:
Welcome to minicom 1.83.0
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Mar 7 2000, 06:12:31.
Press CTRL-A Z for help on special keys
00000400*.
###################################
#
# 68ez328-DrangonBall Monitor
# Version 0.06
# Smart System Technology Co.,Ltd.
# Programed by Byung-Chul,Chae
# dataeng@chollian.net
# FEB 01, 2001/Korea
# HH version by tpu(tapu@371.net)
###################################
0x630EHHTech: cs89x0.c: CrystalLan device found.
cs89x0.c:v1.02 11/26/96 Russell Nelson <nelson@crynwr.com>
cs89x0.c:68ez328-DragonBall support HHtech <support@hhcn.com> 2002
initializing...
Reading image.bin from 192.168.2.32 to 0x100000
~~~~~~~~~~~~
〔TFTP服务器IP地址,image.bin从该处获得〕
.
cs8900: using 10Base-T (RJ-45)
(这里大约要等待2分钟,从TFTP服务器下载image.bin,这期间可以看到TFTP服务器的以太网灯一直在很快的闪烁,因为这是UDP包。)
ICMP : Port Unreachable
ICMP : Port Unreachable
ICMP : Port Unreachable
ICMP : Port Unreachable
TFTP lost connection to server.
ICMP : Port Unreachable
Errors in TFTP download.
Read 2097152 bytes (4097 blocks)
sector protect verifing...
sector[0]=unprotect
sector[1]=unprotect
sector[2]=unprotect
sector[3]=unprotect
sector[4]=unprotect
sector[5]=unprotect
sector[6]=unprotect
sector[7]=unprotect
sector[8]=unprotect
sector[9]=unprotect
sector[10]=unprotect
sector[11]=unprotect
sector[12]=unprotect
sector[13]=unprotect
sector[14]=unprotect
sector[15]=unprotect
sector[16]=unprotect
sector[17]=unprotect
sector[18]=unprotect
sector protect verify completed
sector erasing...
sector erase = 0
sector erase = 1
sector erase = 2
sector erase = 3
sector erase = 4
sector erase = 5
sector erase = 6
sector erase = 7
sector erase = 8
sector erase = 9
sector erase = 10
sector erase = 11
sector erase = 12
sector erase = 13
sector erase = 14
sector erase = 15
sector erase = 16
sector erase = 17
sector erase = 18
erase completed
****************
****************
****************
****************
****************
****************
****************
****************
****************
****************
****************
****************
****************
****************
****************
********
**
**
****e
当用./flash烧写时,实际上就是通过bootstrap用串口线下载一个RAM版的bootloader到板子的DRAM中(这就是进入minicom前打一串#号期间所作的工作)(对于Coldfire就是通过BDM下载RAM版的bootloader,比龙珠的串口就要快多了)
这个bootloader启动,就必然用到启动代码,就是那个.S文件,它和uClinux里面的ucsimm-head.S(对于Coldfire是crt0_ram.S)作用是一样的,都是一个FOR 同一个CPU的启动代码。
一般的方式下都是先启动bootloader,然后下载Linux内核,再用一个跳转将控制权交接给Linux内核,这样启动代码一般都是被执行两次,即bootloader的执行一次,跳转到LINUX又执行一次。
但龙珠因为目前ROM版本的bootloader还没搞定,因此还不能这样调试RAM版Linux内核,它现在是直接用RAM版bootloader把ROM版Linux内核烧写到板子的FLASH上,然后断电,拔掉JA3跳线,加电启动就直接启动ROM版Linux内核了。
至于中断向量表,可以设在任何地方,不像我们学习的微机原理里面的8086一定要设在RAM的0地址。在龙珠和Coldfire处理器里面,中断向量表的起始地址是通过设置VBR寄存器来实现的。
一般的bootloader用不到任何中断,例如华恒提供的2.4内核里面的colilo;但烧写工具中用到的RAM版bootloader和华恒提供的ROM版bootloader(目前冷火产品中提供的,龙珠暂缺)都支持TFTP以太网下载image内核映像文件,这就必然要用到以太网中断,也就必然要用到中断向量表。对于RAM版bootloader,它的中断向量表就设置在RAM的0地址,控制器交接给Linux后,bootloader所用的所有内存地址就都被Linux重新分配覆盖了,当然Linux重新设置中断向量表也同样是RAM的0地址;
对于ROM版本的bootloader,则将中断向量表设置到FLASH的起始地址,即占用前面的0x400空间,其实其中只有一个四字节是有用的,正因为它是固定的,不会像Linux一样还有动态的request_irq来增加中断向量,所以它可以固化到FLASH中,否则就必然放到可写的RAM中,正如Linux所选择的那样。

11、板子经常重启。例如:在flash_erase执行时重启,这是怎么回事?
这是供电(如市电)电源电压过低的原因,若出现此现象,建议采用稳压6V电源供电。

12、为何无法对板子上的文件进行写操作?
板子上的ROM FS为只读文件系统,是无法进行文件写的。只有/etc/config和/var是RAMDISK,是可写的。不过RAMDISK的容量有限,一般都很小,如64K,一般最大只能2M。这可以在make menuconfig中选择配置。

13、板子PING不通?
首先检查板子与PC机是否同一网段;然后请检查PC机网络配置;
最后检查网线,HUB等

14、mount不上宿主机硬盘怎么办?
mount命令格式为:
mount 192.168.2.32:/ /mnt
mount不成功常见的原因一般都是由于宿主PC机得NFS没有配置好,或者是板子与PC机之间的网络根本没通。

15、关于编译重烧启动时出现“unable to open an initial console”问题
解决办法:
在宿主机上执行:
cp -f /HHDREZ328-R2/tools/bin/genromfs /bin
cp -f /HHDREZ328-R2/tools/bin/genromfs /sbin
cp -f /HHDREZ328-R2/tools/bin/genromfs /usr/bin
cp -f /HHDREZ328-R2/tools/bin/genromfs /usr/sbin
华恒安装光盘将交叉编译开发工具集安装到/usr/local/bin/目录下,制作根文件系统romfs.img时使用的是genromfs工具,但PC机器上也自带了一个genromfs,这两个是不同的。
但PC机的搜索路径中/usr/bin/优先于/usr/loca/bin/,因此编译是使用了宿主PC机的genromfs,
而不是uClinux所要使用的,所以会出错。
其实还可以这样做,就是修改uClinux-dist/vendor/Arcturus/uCsimm/Makefile,
将其中的genromfs改为/HHDREZ328-R2/tools/bin/genromfs即可。

16、最新产品手册
华恒各系列开发套件的产品手册都定期在更新,若发现套件中附带的印刷本手册需要更新,就可以到hhcn.com产品销售对应产品的栏目右上角下载该产品的技术手册。
对于HHDREZ328-R2产品最新手册的具体地址在:
http://www.hhcn.com/chinese/hhdrez328-r2.html
页面右上角“技术手册(PDF)”,右键选择“目标另存为(A)”,下载保存到PC上。

17、保存配置的方法
(1) 对于比较多的配置文件,一般的都先写在RAM盘中,然后选择保存,一次性写入FLASH的某几个扇区。这时就可使用flatfsd软件,它的使用需要内核的配合支持,即要在blkmem.c中为其指定保存数据的几个扇区的起始/结束地址。这种方式不能适应非常频繁的写入(如一分钟写100次)。
板子上2.0内核里提供了flatfsd保存配置的机制,即板上/etc/config/为RAM盘,存放所有应用程序的配置文件,当用户执行killall -10 flatfsd命令后,则将该目录下所有文件保存到板子第二片FLASH的最后四个扇区中。而板子启动时,执行/etc/rc中flatfsd -r命令,将保存在FLASH中的内容恢复成/etc/config/中的文件。这样便可实现用户配置文件的保存与启动恢复。
下面列出/etc/rc文件的部分内容:
/bin/expand /etc/ramfs.img /dev/ram0
/bin/expand /etc/ramfs.img /dev/ram1
mount -t proc proc /proc
mount -t ext2 /dev/ram0 /var
mount -t ext2 /dev/ram1 /etc/config
mkdir /var/tmp
mkdir /var/log
mkdir /var/run
mkdir /var/lock
/bin/flatfsd -r
板子上一片FLASH内的扇区分布如下:
{"Am29LV800T", 0L, 0, 19, 0, 4 ,{
{65536, 0x00000, 1},
{65536, 0x10000, 1},
{65536, 0x20000, 1},
{65536, 0x30000, 1},
{65536, 0x40000, 1},
{65536, 0x50000, 1},
{65536, 0x60000, 1},
{65536, 0x70000, 1},
{65536, 0x80000, 1},
{65536, 0x90000, 1},
{65536, 0xA0000, 1},
{65536, 0xB0000, 1},
{65536, 0xC0000, 1},
{65536, 0xD0000, 1},
{65536, 0xE0000, 1},
{32768, 0xF0000, 1},
{8192, 0xF8000, 1},
{8192, 0xFA000, 1},
{16384, 0xFC000, 1}
}
(2)提供memtools软件工具,可在FLASH扇区上保存自己的配置文件。对于简单的数据,小的配置文件等,而且不是非常频繁的(例如一分钟写10次)写入的,可以直接自己在FLASH的空余处(例如第二片FLASH上)划出一块区域,以自己定义的方式写入,并在板子启动时自动读出。华恒提供了这样的样例代码,即user/memtools/,其详细介绍在手册第二章“FLASH扇区保存IP地址”一节。这样作最大的好处是用户的控制程度最大,形式最灵活,保存的可以是自定义的数据,可以不是文件的形式。而上面的flatfsd的方式都是要求文件的形式保存,无法处理自定义的数据保存。

18、bootloader编译的问题
最新的升级版本在bootloader目录make,提示
as: unrecognized option -m68000
暂时可先这样解决问题:
cd /
mkdir /uclinux
mv /HHDREZ328-R2/tools /uclinux
cd /HHDREZ328-R2/bootloader
make
这样就可以编译通过了:(
若本来就有老版本的uclinux的客户,就直接用老版本uclinux/bootloader/目录来编译和使用即可。

19、基本硬件检测
要检测一下板子是否硬件损坏,
可以到以前老的安装软件里面有个kernel_rom的目录,(若没有,可以从hhcn.org下载,或者EMAIL support@hhcn.com索取)
这个目录里面有一个test_ez328boot.pl文件,如下操作:
1、首先要在PC REDHAT LINUX 上安装PERL模块
2、短接板子的JA3跳线,运行./test_ez328boot.pl
3、进入pl的简单SHELL环境,可以读写DRAM/FLASH内存的值,读写都正确就说明板子硬件没有问题(当然以太网是没有办法测了)
例如读内存DRAM 0x300的连续10个值
ez328boot>get 300 10
则会返回读出的值,再写入一个值,
ez328boot>put 300 1234
然后再读出来看是否一致:
ez328boot>get 300 10
一致就说明DRAM没有问题。
FLASH的起始地址是0x1000000
也一样的是get,但写入就不是put了,因为要有时序,我们提供了flash1/flash2两个命令,分布写入第一片/第二片FLASH的最开始两个字节1234。

20、Perl模块在哪里下载?
http://www.cpan.org/

21、关闭SHELL对串口的占用,使之用于串口通信和MODEM拨号
对于2.0的内核,在uClinux-dist/linux-2.0.x/arch/m68knommu/kernel/setup.c文件中,指定了CONSOLE口使用的设备为:
char console_default[] = "CONSOLE=/dev/ttyS0";
而且在该文件中,对于COLDFIRE系列平台,它void setup_console(void)中作出如下指定:
/* If no CONSOLE defined then default one */
if (sp == NULL) {
strcpy(command_line, console_default);
sp = command_line + 8;
}
所以只要将char console_default[] = "CONSOLE=/dev/ttyS0";改为:
char console_default[] = "CONSOLE=/dev/null";即可。
但user/init/进程里还是一定要启动sh,否则许多依赖SHELL执行的脚本都无法执行了
其实CONSOLE=/dev/ttyS0,19200 root=/dev/rom0 ro是启动时传给内核的参数。

22、第三版中Linux2.0.x内核为什么进不了shell?
因为提供的版本中默认的是Linux2.4.x内核,该内核中不需要login和agetty就可以进入shell,故在inittab中除去了,如果使用2.0.x内核就必须加进这一句:
ttySO:vt100:/bin/agetty -l /bin/login.ttySO

23、关于REDHAT9下面PERL模块安装的问题
安装Getopt-Long-2.x.tar.gz有问题的话,请到www.cpan.org下载一个稳定版本的perl:即stable.tar.gz,解开后看里面的INSTALL文件,按照上面的说明进行安装。
然后再回去安装那个Getopt-Long-2.x模块就不会有问题了。

24、关于mount块宿主机上应用程序执行时报错:nfs: server 192.168.2.32 not responding的问题
关于EZ328板子mount宿主机上程序执行,会报错:
nfs: server 192.168.2.32 not responding, still trying
的问题,建议mount宿主机时用如下命令:
   mount -t nfs -o rsize=1024,wsize=1024 192.168.2.32:/ /mnt
这样就不会有问题了。

25、关于LCD上用textout显示英文字符串时字符错位的问题:
这个问题是由于我们在uClinux-dist/user/gui/graphic.c中对字符的定位采用了内核中英文字库(fontdata_8x16)的绝对地址的方式,而每次编译内核后,这个fontdata_8*16位置都会有一些变化,从而造成了这个错误。这个fontdata_8*16字库在内核中的地址是在uClinux-dist/linux-2.4.x/System.map中给出的,要解决这个问题,需要如下操作:
cd /HHDREZ328-R2/uClinux-dist/linux-2.4.x
vim System.map
......
0004a678 d net_debug
0004a67c d i.945
0004a680 d fontdata_8x16
0004b680 D font_vga_8x16
0004b698 d fontdata_pearl8x8
0004be98 D font_pearl_8x8
......
从上面可以看到fontdata_8x16的地址为0004a680,下面就要去修改uClinux-dist/user/gui/graphic.c中的地址与之相匹配:
cd /HHDREZ328-R2/uClinux-dist/user/gui (这个目录可以是用户自己创建的目录,里面只要有graphic.c即可,我们要修改的就只是graphic.c这个文件)
修改的地方就是那个图形初始化函数:short initgraph(void)
E_Font = (unsigned char*)(screeninfo.english_font);
//printf("E_Font Address %x %x\n",E_Font,screeninfo.english_font);
if(!E_Font)
E_Font=(unsigned char*)(0x0004a690);
screen_ptr = mmap(0, screen_height * screen_width>>3, PROT_READ|PROT_WRITE, 0, screen_fd, 0);
......
这里可以看到两个地址不匹配,只要将上面的地址改为E_Font=(unsigned char*)(0x0004a680);即可。
然后返回uClinux-dist目录执行make,然后mount上执行您的显示程序就不会有错位现象了。

中国·安徽 合肥市高新区梦园路9号研发中心综合楼3层 (230088)
联系电话:0551-5325652/5325653/5325631/5325173/5333155/5333156/5333157  传真:0551-5325323 邮箱:market@hhcn.com
Copyright©1998-2008 HHTech.Co.,Ltd. All rights reserved. 华恒科技 版权所有