第一步:首先在VMWARE中为我的Fedora10-32虚拟机创建一个单独的磁盘,进入Fedora10系统使用fdisk命令对新的磁盘进行分区和格式化、创建文件系统,使新的磁盘可用。对这个新的sdc磁盘先使用fdisk /dev/sdc,进入菜单后使用n增加一个新的分区,使用p增加主分区,输入1为分区号,然后选择分区大小,我选择默认大小即将整个磁盘分为一个区sdc1;使用w将分区信息写入磁盘并退出。使用mke2fs为sdc1分区创建ext2文件系统,最后可以用fdisk中的p命令查看下整个磁盘的所有分区。
测试一下看磁盘分区是否可用:
将/dev/sdc1 /mnt/mywork ext2 defaults 1 1 添加到/etc/fstab中,这样系统启动后/dev/sdc1就自动挂载在/mnt/mywork目录下。
第二步:构建linux运行系统,包括修改平台输入时钟为12M、NandFlash驱动移植、移植yaffs文件系统、编译BusyBox、构建文件系统、完善串口驱动并且测试了3个串口驱动、网卡移植(DM9000E+TL-WN823N 2.0)、usb驱动移植(两个usb host功能)。加入了3G/4G网络的无线模块,拨号测试成功,条件是在只有一个网络下,后续研究在多网络条件下的使用(即3G/4G pppd拨号网络、wifi无线网络、本地以太网络)。RTC驱动移植,注意在用date -s 设置时间的时候后面的时间应该用双引号包括:
5)点击J-Flash的target->Erase chip,将芯片里面的程序擦除之后即可再此连接下载。
总体来说核心板运行不稳定,怀疑是复位电路不好,s3c2440没能正常复位,接下来准备从复位电路入手看能否解决问题。
这个是正常的复位,用专门的复位芯片产生的,可以看到复位信号在3.3v电源信号后面大约200ms的时间后变为高电平。
这个是我用RC电路产生的复位波形,很难达到复位时序的要求。
可以看出nWAIT是一个输入信号,由外设反馈给处理器的等待信号,请求延长访问周期,控制nWE和nOE作用时间。我在用JLINK调试天嵌的快速启动boot程序的时候发现在访问nandflash的时候进入一个死循环,就是这个死循环导致核心板不能正常启动,#define NF_DETECT_RB() {while(!(rNFSTAT&(1<<2)));}就是在不停地检测RnB的状态:
今天将三个串口都调通了,一天进步一点离成功就不远了。
问题3、在调试串口的时候遇到一个问题,linux串口在接收的时候将0x0a识别为0x0d,通过查询网络资料后修改了串口设置,增加了options.c_iflag &= ~ (INLCR | IGNCR);这句就可以了。
Mbus总线终于调试通过了
问题4、在调试RS485接口的时候发现一个设计上的问题,就是将485芯片3082的收发引脚跟max3232的收发连接到一起,两个再共享串口uart1的收发引脚,这两个芯片会相互影响,在使用3082接收数据的时候,3232的rx引脚会将uart1的rx引脚拉高,同样在使用3232接收数据的时候3082的rx引脚也将3232的rx引脚拉高,在设计上应该将两个芯片的连接分开或者使用跳线分开。下图是正确的设计,将两个芯片的连接使用跳线J305分开:
问题5、最近将linux内核源码纳入了svn管理中,因此创建了一个定制的linux源码目录cqznsb_linux2.6.30.4,在此源码目录中创建一个编译输出目录BuildOutput,这样编译过程中产生的中间文件就都在这个目录中了,这样就保持了源代码目录的整洁性,有利于svn进行管理。编译的步骤是先在源码目录中使用make menuconfig配置好内核,将配置好的.config文件拷贝到BuildOutput目录中,就可以在linux源代码目录中使用make O=BuildOutput/ 来进行zImage文件编译。后续如果需要重新配置内核就需要进入到BuildOutput目录中进行make menuconfig;make clean等操作,但在编译的时候需要返回到源码根目录。后面又做了两个脚本文件,makezImage和makeModules,并将BuildOutput中配置好的config文件备份到源码根目录中名字为cqznsb_config。
问题6、在调试nfs文件系统功能的时候,遇到一个问题,当在开发板上使用mount -t nfs 192.168.1.116:/mnt/mywork/root_nfs /mnt/test/命令的时候有错误产生rpcbind: server localhost not responding, timed out,然后使用mount -o nolock -t nfs 192.168.1.116:/mnt/mywork/root_nfs /mnt/test/就可以了。
问题7、在开发板中加入嵌入式ftp服务器(vsftpd):
一> 编译 vsftpd 程序
1. 获得源码包:vsftpd-2.3.2.tar.gz
2. 解压,进入源码目录:
#tar xzvf vsftpd-2.3.2.tar.gz
#cd vsftpd-2.3.2
3. 修改 Makefile,指定交叉编译器:
CC = arm-linux-gcc
4. #make
编译时会出现错误,跟 libcap.so 有关
修改 vsf_findlibs.sh:
45-53 行注释掉:
# Look for libcap (capabilities)
#if locate_library /lib/libcap.so.1; then
# echo "/lib/libcap.so.1";
#elif locate_library /lib/libcap.so.2; then
# echo "/lib/libcap.so.2";
#else
# locate_library /usr/lib/libcap.so && echo "-lcap";
# locate_library /lib/libcap.so && echo "-lcap";
#fi
#make
生成 vsftpd 可执行程序,放到根文件系统/usr/sbin 目录下
二> 修改配置文件 vsftpd.conf
需要用到哪一项,就把这一项前面的注释‘#’去掉,这里给出我的配置:
anonymous_enable=YES
no_anon_password=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
ls_recurse_enable=YES
listen=YES
listen_port=21
把修改后的 vsftpd.conf 文件放到根文件系统的/etc/vsftpd 目录下,否则运行时会出错: 500 OOPS vsftpd: cannot open config
三> 创建必要的帐号、目录
1. 建立 FTP 目录:
因为 ftp 目录不能开启所有权限,所以建一个 pub 目录加上所有权限,用来传输文件
# mkdir -p /var/ftp/pub
程序运行所用到的目录
# mkdir -p /usr/share/empty
2. 改变目录权限
# chown root:root /var/ftp
# chmod 755 /var/ftp
# cd /var/ftp
# chmod 777 pub
3. 添加帐号(如果系统中有,就不用添加)
# useradd nobody
# useradd -d /var/ftp ftp
四> 在开发板上运行 vsftpd
把制作好的文件系统下载到开发板上,在后台运行程序:
# vsftpd /etc/vsftpd/vsftpd.conf&
也可以把它写入启动脚本,vsftpd 后面的参数就是要使用的配置文件。
程序运行后可能出会现错误:
500 OOPS: could not bind listening IPv4 socket
解决方法:
1. 复制 vsftpd 源码目录下的 xinetd.d 文件夹到文件系统/etc 目录下,里面有一个文件 vsftpd,
修改其内容: disable = yes。
2. 可能是已经启动了 vsftpd,端口已被占用,再次启动 vsftpd 就会报错,可以先结束 vsftpd 进程,再启动。
我的集中器采集器设备V2.0版本,如下:
PCB板子的设计上比V1.0版本要大了点,修正了V1.0板的错误,功能上更加完善,MBus多通道切换电路也调试通过,V2.0PCB板还需要进一步完善的地方,主要是MBUS接口保护和RS485接口保护部分的TVS管(SD101~SD103,SD301~SD303)的封装的焊盘需要加大一点,这样方便焊接;然后是15V转5V的芯片L7805考虑将其平放在PCB板上,因为核心板的电流有200ma左右,通过L7805的电流较大,导致其发热量高(用手触摸的话感觉还是有点烫手),如果可以平铺在PCB板上的话可以通过PCB及时将热量散去,当然这有待进一步确认。
Mbus多通道切换电路需要做一点改进,控制三极管N501~N503的e级应该连接到地,这样bsp250MOS管 Q501~Q503才能打开,如下图所示。
连续调试了几天终于将Mbus多通道切换电路完整设计出来了,并在板子上调试通过,正确的电路如下仿真设计:
当S1接到3v的时候,Q6、Q5导通,R9、R10进行分压,通过合理的电阻选择,不管在Q3上是否加载12V调制电压都可以让Q3关闭,当S1接到0v的时候,Q6、Q5关闭,R10、R13的分压可以让Q3在加载和没有加载12V调制电压的时候都导通。而之前的设计存在的一个问题是0v的时候Q3没有导通,在进行电压调制的时候,发送mark的时候加载12v的Q3导通,发送space的时候为0v,Q3截止,在表具端的表现为一个0v到39v变化的方波,想到于表具在不停地重复上电,而不是在27v的基准电压上进行的12v调制的方波。当然也有用继电器的方式设计多Mbus通道。
下图为v2.1版本,主要将L7805平铺在pcb上,使pcb板散热均匀。在pcb板设计的时候对于发热大的元件,在其下面可以大面积铺铜,用于散热,这样可以提高元件的可靠性。