1月9日,在线听RF检波器如何简化系统设计,与ADI工程师一起学习吧!→ 报名参会 ←
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 嵌入式LINUX开发套件常见问题解答

共1条 1/1 1 跳转至

嵌入式LINUX开发套件常见问题解答

院士
2002-05-21 01:12:00    评分
1. 关于宿主机LINUX的安装 建议使用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。 配置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 【这里查看TFTP连接是否成功】 Read 1004740 bytes (1963 blocks) >>>>>>>>>> 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了。 问:烧写时显示如下信息,但minicom端什么信息也没有打印出来,而且板子仍然在运行,运行指示仍然正常闪烁? 在执行./flash的TTY一侧,会显示: GNU gdb 4.18 Copyright 1998 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=m68k-bdm-elf"... 这是PC端BDM驱动(linux-bdm.o)的问题,必须安装正确的驱动(例如华恒光盘提供的)。按CTRL+C结束该进程,用rmmod linux-bdm删除当前的驱动,用insmod安装正确版本的驱动再重新执行./flash即可。 问:烧写完毕后最后会报如下错误: Program received signal SIGBUS, Bus error. 0x488 in asm_exception_handler () 1: x/i $pc 0x488 : 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文件与内核版本不匹配现象,这时只要重编该模块驱动即可。光盘提供了BDM的全部源代码,生成linux-bdm.o的源代码目录在HHCO5272-R1/bdm/driver/linux下,编译后重新安装即可。 cd HHCO5272-R1/bdm/driver/linux make clean make insmod linux-bdm.o 问:板子刚拿到,一加电就不启动,运行指示灯不闪,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目录下进行编译,在其它目录下编译都会报错。 ◇当板子插了网线时,核心板上的百兆以太网连接和碰撞指示灯(LEDL2)就会亮起来,若这时板子ping一台PC机或者一台PC机ping板子的话,LEDL2灯就会闪烁起来。若LEDL2不亮,可能是以太网插口接触不好所致,用力插紧即可。 ◇HHCO5272-R1提供了串口2可用于作MODEM拨号,需要把uClinux/user/pppd/、chat/和diald/三个目录加入编译,并编写正确的拨号脚本和配置文件。华恒提供完备的PPP拨号软件包。 ◇HHCO5272-R1板上采用的是ROMFS的文件系统,它是只读的。可以扩展支持JFFS/JFFS2文件系统,它可读可写。华恒提供完备的JFFS/JFFS2支持软件包。 ◇板子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软件包销售,可大大加快用户的开发进度及产品上市时间 [em27]



关键词: 嵌入式     LINUX     开发     套件     常见     问题解答         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]