首先在板子的串口终端里面执行
ifconfig
查看板子的MAC地址是否非法,一般的就是MAC地址的第一个字节为7F或者11之类的都是广播的地址,不能正常使用的。
这时您可有两种解决办法:
1、cd /jffs2/sbin
./setmac 00 e0 11 22 33 66
这样设置板子的MAC地址后重启板子,再查看ifconfig看MAC地址是否已经更为您设置的00 e0 11 22 33 66(当然这个地址您可任意设置了,只要不是非法的即可) ,若更改成功,则就可以正常的使用板子的以太网了,就可以NFS mount等了。
2、直接修改内核以太网驱动:老版本的软件里面以太网驱动是 采用静态编译到内核的方式,新版本软件里面则是动态MODULE加载的形式。
对于老版本客户,可直接如下:
cd kernel/drivers/net
vim dm9000x.c
查找EEPROMMAC这个宏,将这句对该宏的定义注释即可:
#define EEPROMMAC
然后重编内核zImage,重新烧写即可。
板子上除了提供minigui/microwin的演示例子外,还提供了一套华恒自己编写的GUI系统,这个是无窗口机制的小GUI系统,在板子的/jffs2/guidemo下面,可执行文件是tp_gui,这是个可用触摸屏控制的GUI代码例子,其中还有一个SOCKET通信的例子,就是在一台IP为192.168.2.100的LINUX PC上运行一个小程序,可将LINUX PC上的一个位图文件或者一个普通文件通过以太网传送到板子上,并在LCD上显示出来。这个在PC上运行的软件代码在:HHARM9-EDU/experiments/EXP18/app/2410-gui-demo-pc
为了兼容FREESCALE i.MX处理器,HHARM9-EDU的触摸屏没有采用S3C2410内置的AD通道,而是外扩了AD芯片,所以软件上也和HHARM9-EDU开发板有所不同,以前的触摸屏驱动是静态编译到内核里面的,在kernel/drivers/char/s3c2410-ts.c,原来设备文件名为/dev/touchscreen/0raw,
现在是动态MODULES形式加载的,代码在:
HHARM9-EDU/experiments/EXP18/driver目录下,名为digi.o,现在叫做/dev/digi。许多触摸屏软件只要改这一处即可。
还有,HHARM9-EDU实验箱可做MPEG4/MP3的解码演示,这些演示用的代码和MPEG4 AVI的电影文件一般无法放在板载的16MB FLASH里面,一般都要放在外部存储器里面,例如NFS 网络硬盘或者板子挂接的硬盘、CF卡、SD卡等。
最简单的就是用NFS来播放放在REDHAT LINUX PC硬盘上的电影文件。这些演示用的程序、代码、脚本和电影文件在:applications/video-demo下。演示时请将这个目录直接mount为板子的/mnt目录,因为你看我们演示是这样操作的:(在minicom等终端里面操作:)
mount -o nolock 192.168.2.100:/AV-DEMO /mnt
cd /mnt
./rc-video(单视频,执行./rc-mp3单音频,执行./rc-mtv音视频同步解码播放)
我们来看看这个脚本的内容:
cat rc-video (这样就可以看到LCD上播放郑秀雯的MTV了)
#!/bin/sh
while(true)
do
cd /mnt
./mplayer -nosound zhenxiuwen.avi
done
可见,这里面指定了/mnt目录,你mount到其它目录就要改改这个小脚本了。
移植一个格式化硬件的工具:
去网上下载一个:e2fsprogs-1.35.tar.gz,具体下载地址(这些下载地址不要问人,直接google搜索即可找到):
http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.35.tar.gz
这里再给一个PC LINUX下常见软件的下载网站:
http://ftp.gnu.org/gnu/
这些应用程序从PC LINUX移植到ARMLINUX非常的容易,大多用下面这句./configure指定编译器后一次就可编译通过使用起来。
在REDHAT LINUX下解压,然后执行:
tar xzf e2fsprogs-1.35.tar.gz
cd e2fsprogs-1.35
CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc ./configure --target=arm-linux
make
然后就OK了,就可以在misc目录下看到交叉编译出来的mke2fs工具,这个工具NFS mount到我们的HHARM9-EDU板子上(或者直接复制到/jffs2目录里面保存下来即可),用12V电源,接上IDE硬盘或者CF卡后,执行:
./mke2fs -j /dev/hda1
就可以格式化硬盘和CF卡了。
当然,硬盘不一定都是/dev/hda1,具体是hdax要看/proc/partitions,详见本文上面关于U盘/SD卡等的介绍,都是一个道理。
一些小的驱动和相关测试应用程序
对于HHARM9-EDU基本底板的侧面有四个小按键,我们为它提供了一个小驱动和一个简单的应用程序来调用这个驱动做测试,代码分为驱动和应用程序:applications/keys4下面的keys4.c为驱动及其Makefile,驱动是以动态MODULES的形式加载的;applications/keys4/key里面为应用程序。
用法如下:
NFS mount上之后,在minicom里面执行
insmod keys4.o
这时你在板子上lsmod就可以看到这个驱动模块已经加载了。
然后执行cd key ; ./key
这时,用户按下板子上的小按键,就可以看到minicom里面显示各个键的键值(是随便定义的1~4)
这时,你ctrl+c停止key的执行后,再看看:
ls -l /dev/key*
就可以看到这个程序动态的为你创建了一个设备文件keys4,主设备号:138(在keys4.c驱动代码里面指定的),这个不需要手工创建设备mknod /dev/keys4 c 138 0,就是因为驱动代码里面是这样注册设备的:
static int __init keys4_init(void)
devfs_keys4 = devfs_register(NULL,"keys4",DEVFS_FL_DEFAULT,KEYS4_MAJOR, 0, S_IFCHR |S_IRUSR |S_IWUSR |S_IRGRP |S_IWGRP, &keys4_fops, NULL);
对应的,我们看看另外一个小驱动的测试代码:
我们HHARM9-EDU还提供了一个GPIO测试的驱动和应用程序,就是选择GPIO_C8作为一个输出口线,通过用户在测试用的应用程序里面控制这个口线输出0或者1,即可高低电平。代码分为驱动和应用程序,代码位于:
/HHARM9-EDU-R3/applications/write_gpio/driver和app目录下。
相关代码:
驱动里面在open这个设备的时候设置这个口为输出(因为GPIO必须设置方向,做输入还是输出)
int gpio_open(struct inode *inode, struct file *filp)函数里面设置: set_gpio_ctrl(GPIO_MODE_OUT | GPIO_C8);
关键还是看看它的设备注册函数:
int __init gpio_init(void)
{
int i;
register_chrdev(IOPORT_MAJOR, "gpiotest", &gpio_ctl_fops);
return 0;
}
使用方法就是NFS mount PC硬盘后,执行insmod gpio_drv.o即可加载驱动;
然后还是要NFS mount这个gpio_test应用程序可执行文件执行测试,但这之前必须在minicom里面手工创建驱动里面指定的设备文件:
mknod /dev/gpiotest c 220 0
然后才行执行
./gpio_test
可以看出,用devfs_register注册的设备会自动创建/dev/下的设备文件,而 用register_chrdev注册的设备则需要用户手工mknod创建设备文件
如何使用ppcboot
如何查看板子从什么IP地址的TFTP SERVER下载?
板子启动时,按下回车,就进入ppcboot命令提示符
smdk2410#
这时执行
smdk2410#printenv
显示信息里面的serverip就是板子所要下载文件的TFTP SERVER 的IP地址,也就是说你的LINUX PC机的IP地址要设置为这个IP才能下载烧写。
支持动态改写tftp时的serverip,并可以直接保存且下次重启后,改动仍然生效。
改写serverip的步骤和格式如下:
在正常启动时,按ctrl+c进入smdk2410#提示符,在提示符下直接执行
例如原先的serverip为192.168.2.25
现改为192.168.2.110
格式为:
smdk2410#setenv serverip 192.168.2.110
设置
smdk2410#save
保存
关于下载和烧写的说明,可直接参见: /HHARM9-EDU/Images/HHTECH-burn-cmd里面记录的操作。
板上MODULES形式驱动默认加载的列表:
~ # lsmod
Module Size Used by
mac_eeprom 3936 0 (unused) #用于setmac设置以太网MAC地址时读写EEPROM的驱动
electromotor 1488 0 (unused) #步进电机驱动,为/cramfs/sbin/motor_test所调用
2410audio 10928 0 (unused) #音频/dev/dsp驱动
led 1760 0 (unused) #LED驱动,为/cramfs/sbin/key所用
keybd 1872 0 (unused) #4×4小键盘驱动
RTC 3952 0 #RTC驱动,用于通过date命令设置系统时间写入RTC芯片X1227时调用
mmcsd_disk 3632 0 (unused) #SD卡驱动
mmcsd_slot 4016 0 (unused) #SD卡驱动
mmcsd_core 8768 1 [mmcsd_disk mmcsd_slot] #SD卡驱动
dm9000x 10720 2 #以太网驱动(以前是静态编译到内核的方式,新版本改为动态加载了)
digi 6064 1 #触摸屏/dev/digi驱动(普通的HHARM9-EDU的触摸屏驱动用设备文件为/dev/touchscreen/0raw)
控制台上老是出现hub.c: Cannot enable port 2 of hub 1, disabling port.
hub.c: Maybe the US, 想去掉这些信息,请如下操作:
cd kernel
make menuconfig
USB support --->
<*> S3C2410 OHCI-compatible host interface support
(2) Maximum port(s) of RootHub
回车进入一个小界面,将上面这个2改为1,然后退出保存配置,make zImage,重烧内核即可。
在板子的RAM中调试内核或ramdisk.image.gz文件系统
可在ppcboot命令行提示符下一次性敲入如下命令:(其实可将这行长命令保存到一个文件里面去,用的时候用鼠标左、右键贴到ppcboot命令行里面执行即可)
smdk2410#tftp 30008000 zImage;tftp 30800000 ramdisk.image.gz;go 30008000
则可立即在内存中跑下载的更新内核和您新做的ramdisk.image.gz文件系统。
busybox里面其实提供了N多的命令功能,我们没有在ramdisk里面体现出来, 可这样加入:在minicom 里面执行
cd /bin
ln -s busybox find
ln -s busybox su
就可以添加find和su命令,这些命令的代码已经是编译到busybox 里面了,就是需要在这里加个链接即可。
详细操作请下载阅读:
http://www.hhcn.com/chinese/files/howto-add-shellcmd-to-HHARM9-EDU-v1.0.pdf
ARMLINUX占用S3C2410的一个TIMER做时间片轮转,这个TIMER的中断处理在:
kernel/include/asm/arch/time.h里面实现的。