2008年11月5日星期三

交叉编译环境搭建

安装交叉编译器

ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载交叉编译器cross-3.2.tar.bz2存放在/usr/local目录下。

切换致该目录:

# cd /usr/local

# mkdir arm

然后解压cross-3.2.tar.bz2

# tar jxvf cross-3.2.tar.bz2 –C /usr/local/arm

3、把交叉编译器的路径加入到PATH。(两种方法ab

a、#export PATH=$PATH:/usr/local/arm/2.95.3/bin

注:(这只能在当前的终端下才是有效的,)

b、修改/etc/profile文件:

vi /etc/profile

增加路径设置,在末尾添加如下:

export PATH$PATH:/usr/local/arm/2.95.3/bin

4、使新的环境变量生效。

# source /etc/profile

5、检查是否将路径加入PATH的方法。

# echo $PATH

如果显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。自此,交叉编译环境安装完成。

6、测试。

下面我们就来测试一个简单的例子。

/*Hello.c*/

#include

int main()

{

printf(“hello word!\n”);

return 0;

}

程序输好以后确认无误,保存。进入程序文件所在目录

# arm-linux-gcc hello.co hello

-o可以理解为“目标为生成”)arm-linux-gcc是第一次出现,有人可能会问这个哪里来的,不妨打开刚才安装的交叉编译工具目录/usr/local/arm-linux/arm-linux/bin/可以发现里面有一个arm-linux-gcc文件,这个就是针对armCPUgcc编译器了。以后用其它编译工具链式也可以通过这种方法看看其编译器是什么了。编译好了以后就可以下载到目标机进行测试了。当然也可以先在PC机上测试正误。用gcc hello.co hello就可以生成PC机上程序了,在运行./hello就可以发现终端显示hello!字样。用arm-linux-gcc编译的程序在PC机上是不能运行的,运行后给出错误报告:无法执行二进制文件。说明经过交叉编译环境编译出的文件是硬件可执行的二进制代码文件

2008年11月4日星期二

linux安装配置ftp

sudo apt-get install vsftpd

安装完毕后或许会自动生成一个帐户"ftp",/home下也会增加一个文件夹。
如果没有生成这个用户的话可以手动来,生成了就不用了:
代码:
sudo useradd -m ftp
sudo passwd ftp

有"ftp"帐户后还要更改权限
代码:
sudo chmod 777 /home/ftp

在这个目录下我建立一个文件夹专门保存需要共享的内容

2.配置文件
通过sudo gedit /etc/vsftpd.conf修改。
配置文件比较简单,如下
代码:
#独立模式启动
listen=YES

#同时允许4客户端连入,每个IP最多5个进程
max_clients=200
max_per_ip=4

#不允许匿名用户访问,允许本地(系统)用户登录
anonymous_enable=NO
local_enable=YES
write_enable=NO

#是否采用端口20进行数据传输
connect_from_port_20=YES

#生成日志
xferlog_enable=YES

#指定登录转向目录
local_root=/home/ftp/ftp


这样,在同局域网的电脑上,用我的IP地址,用帐号"ftp"和对应密码就可以登录了,密码是第一步里面passwd那句指定的。

就这样就结束了,请大家拍砖!![/code]

----------------------------------
对了,更改配置后不要忘了重启ftp服务 :D
代码:
sudo /etc/init.d/vsftpd restart

搭建8622L平台

硬件连接:
1. 连接电源
2. 连接网线
3. debug板上的com1(右侧)连接上串口线,用于PC上的tera term(windows平台)或minicom(linux平台)和8622L通信.

软件:
1. armutils_2.5.129.0.tgz(uClinux,包括编译器)
2. mrua_EM8622L_2.7.133.0.arm.tar.gz( RM8620L的开发包,包含有driver和rua api及dcc api,应用程序)
3. bootloader (针对单板)


系统完成后的网络架构:
1. 8620L平台,其并行flash已经被烧入uClinux系统,并有IP地址.
2. Windows客户机,使用tera term通过串口,把kernel烧到并行flash上,用命令boot rom启动uClinux并且登陆.
3. Linux服务器,主要作用是编译软件,有nfs服务,nfs服务目录是/share/nfsshare,文件包括有8620L的驱动程序,应用程序和音视频文件,可以被8622L使用.

系统搭建过程:
1. 在Linux服务器上编译compiler,kernel和文件系统
1). mkdir 8622L
2). cp armutils_2.5.129.0.tgz /8622L/
3). tar xzvf armutils_2.5.129.0.tgz
4). cd /8622L/armutils_2.5.129.0
5). make 可以看到操作流程的帮助
6). make config 设置IP地址,mask,母板类型和版本
7). make download光盘中的开发包已经做了,勿需再做
8). make toolchain(生成编译器)
9). make linux-config 可以修改uClinux的配置
10). make linux 生成kernel-2.4.22-config-envision8622L-romfs-rom.bin,这是uClinux的内核.
11). make rootfs 生成rootfs-config-envision-EM8622L-romfs.ext2,这是创建root文件系统
12). make romfs 生成romfs-config-envision8622L-romfs-rom.bin.gz,这是创建rom文件系统
2. 在Linux服务器上编译8622L驱动程序和应用程序
1). cd /8622L/armutils_2.5.129.0
2). source path.sh
3). source kernelpath.sh
4). cp mrua_EM8622L_2.7.133.0.arm.tar.gz /8622L/
5). cd /8622L
6). tar xzvf mrua_EM8622L_2.7.133.0.arm.tar.gz
7). cd /8622L/mrua_EM8622L_2.7.133.0.arm/
8). make
9). Do you want to use XIP (eXecution In Place) for your applications? [N/y]
输入n
10). source MRUA.env
11). make kernel 生成目录/8622L/mrua_EM8622L_2.7.133.0.arm/modules/uclinux-arm , 内有llad.o,em8xxx.o
12). make apps 在/8622L/mrua_EM8622L_2.7.133.0.arm/bin下生成播放例程


3. 把kernel和romfs烧入8622L的flash
方法一:LINUX环境:
1). minicom –o connectslow
a). 按键Ctrl-A,O,可以进行配置
b). serial port setup中,使A--serial device设置为/dev/ttyS0,使E--BPS设置为38400 8N1
c). save setup as 设置文件名为connectslow
d). Ctrl-A,X存盘退出
2). 再运行minicom –o connectslow
3). 启动单板,minicom接收到信息后进入到Boot命令行
4). Boot> download serial romfs gz 准备接受文件
5). 打开另外一个终端
6). cd /8622L/armutils_2.5.129.0/bin/
7). sudo uuencode romfs-config-envision8622L-romfs-rom.bin.gz x > /dev/ttyS0 发送文件到minicom
8). 你会看到minicom在下载文件
9). boot> flash list
10). Boot> flash romfs,把文件烧到flash中
11). Boot> boot rom 启动uClinux
12). 得到提示符#
方法二:WINDOWS环境:
1). cd /8622L/armutils_2.5.129.0/bin
2). uuencode romfs-config-envision8622L-romfs-rom.bin.gz x > romfs-config-envision8622L-romfs-rom.bin.gz.uuencode
生成uuencode编码的文件,用于在windows环境下焼入flash
3). 8622L启动后,在tera term出现boot>
4). 运行config serial fast,然后选菜单setup-->serial port,设置baud rate为115200
5). Boot>download serial romfs gz,准备接受文件
6). 选菜单file-->send file,选中romfs-config-envision8622L-romfs-rom.bin.gz.uuencode,确定后,你会看到tera term下载文件
7). Boot> flash romfs,把文件烧到flash中
8). 把baud rate恢复为38400
9). Boot> boot rom 启动uClinux
10). 得到提示符#

通过并行flash烧写sflash时,并行flash要使能sflash及sst的驱动,编译的sflash的bin文件不能太大,需要裁减掉network和pcihost

4. 在linux server上配置nfs服务,nfs服务目录是/share/nfsshare.
1). 修改/etc/exports文件,增加内容如下:
/share/nfsshare 192.168.1.0/255.255.255.0(rw)
2). 运行setup命令,将nfs服务设置成开机后自动启动
选中system services--->nfs后保存退出
5. 把Linux服务器上/8622L/mrua_EM8622L_2.7.133.0.arm/bin/目录下的play_*应用程序, /8622L/mrua_EM8622L_2.7.133.0.arm/modules/uclinux-arm 下llad.o
和em8xxx.o,复制到Linux服务器/share/nfsshare目录下,然后复制一些音视频文件.
6. 登陆8622L并操作
1). Windows客户机,使用tera term通过串口,用命令boot rom启动uClinux并且登陆.
2). mkdir tmp/nfs
3). mount -o nolock 192.168.1.34:/share/nfsshare tmp/nfs
4). cd /tmp/nfs
5). insmod llad.o
6). insmod em8xxx.o
7). ./play_asf -9 xxx.wmv 播放视频
8). ./play_jpeg xxx.jpg 显示jpg图片
7. 测试osd(32位 framebuffer 可参考mrua_EM8622L_2.7.133.0.arm/MRUA_src/mambolfb/README.mambolfb)
1). ./osdbuf_control -c
Get the parameters to insert the mambolfb module
2). insmod mambolfb.o videomemory=0x100000ec videomemorysize=1228800 palette=0x79000 mode=640:480:32
加载osd frame buffer驱动
3). ./fb_test /dev/fb/0
测试OSD,TV屏幕上会出现一个圆环.

8. 红外线遥控器的使用.
参考ir.rar

9. 网络升级bin
进入loader文件夹
1). make CONFIG=config-HM生成loader-flash.bin
2). uuencode loader-flash.bin x>loader-flash.bin.uuencode
3). Tera term终端: boot> download serial boot(无论并行或串行flash启动,都可以烧loader,烧loader时不用跳线)
4). 选菜单file-->send file,选中loader-flash.bin.uuencode,确定后,你会看到tera term下载文件
5). 重起

还可以在boot下网络升级loader,
0). host端 /service dhcpd start
1). cp loader-flash.bin /tftpboot/loader.bin
2). Tera term终端: boot>download net boot
3). flash boot
4). 重起

网络升级romfs.bin
0). host端 /service dhcpd start
1). cp romfs.bin /tftpboot/
2). Tera term终端: boot>download net romfs
3). flash romfs
4). boot romfs 或重起