- UID
- 1029342
- 性别
- 男
|
之前在 AM3715的一个板子上做过一段时间的图像处理算法优化,由于是初次接触sitara系列,过程略显生疏。
1. 由于该算法复杂度不低,有较多的循环,而系统中可用的运算资源只有cortex-A8,所以首先将算法移植到A8上面,没有开启任何编译选项,并进行了耗时测试,结果不是很理想,还需要提升70~80%才能达到性能需求。
2. 查阅了一些资料和别人的经历,利用编译器产生打开了编译选项-ftree-vectorize 和 -mfpu=neon,并且优化级调到了o3,此时性能提升了40个百分点的样子。
3. 为了进一步优化,学习了一下NEON的指令集,尝试把小的循环体以汇编形式实现,NEON在处理循环体形式的向量计算时还是有比较大的潜力,类似于DSP中的SIMD,而且汇编也比DSP简单很多,因为不需要考虑指令并行,只需要排指令流水线即可。汇编完成后,性能已经达到了之前的要求。
最近时间一直在做一个新项目,同时也是对旧项目的硬件平台进行一个升级,所以用了sitara am3517 Cortex-A8做了一块主板。以下简单介绍一下整个开发过程的笔记以及在中间遇到的一些问题及其解决方法。
1、平台硬件资源简介
CPU:TI Sitara AM3517+
DDR2:SAMSUNG K4T1G164QE-HCE7
Nand:SAMSUNG K9F1g08UOD
PHY:NS DP83848C
2、建立TFTP Server
a、安装相关软件包:Ubuntu tftp(服务端),tftp(客户端),xinetd
apt-get install tftpd tftp xinetd
b、建立配置文件
在/etc/xinetd.d/下建立一个配置文件tftp
sudo vim tftp
在文件中输入以下内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
保存退出。
c、建立Ubuntu tftp服务文件目录(上传文件与下载文件的位置),并且更改其权限
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R
d、重新启动服务
sudo /etc/init.d/xinetd restart
3、编译
安装ubuntu10.04,toolchain等相应环境。
export PATH=$PATH:/opt/4.4.3/bin/
编译x-loader
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- am3517evm_config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
./signGP x-load.bin
编译u-boot
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- am3517_evm_config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译kernel
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- am3517_evm_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
setenv bootargs 'mem=256M console=ttyS2,115200n8 noinitrd root=/dev/mtdblock4 rw rootfstype=jffs2 omapfb.rotate=1 omapfb.rotate_type=1 omap_vout.vid1_static_vrfb_alloc=y;'
4、利用busybox制作root file system
编译busybox
make menuconfig
(1)
(2)
(3)
make
make install
构建框架
cd /home/user/
mkdir rootfs
cd rootfs
mkdir –p dev lib etc sys proc mnt var tmp data
chmod 777 *
添加内容
/bin与/sbin目录
cp –rf busybox-1.17.2/_install/bin ./
cp –rf busybox-1.17.2/_install/sbin ./
/dev目录
mknod dev/console c 5 1
mknod dev/null c 1 3
chmod 777 dev/*
/lib目录
cp /opt/4.4.3/arm-none-linux-gnueabi/lib/* ./lib/
/etc目录
fstab:指明需要挂载的文件系统
inittab:init进程的配置文件
profile:用户环境配置文件
init.d目录:启动文件目录,该目录中有个名为rcS的文件,里面存放了系统启动时配置以及自启动加载的进程等。
/proc、/mnt、/var、/tmp目录
基本都是空目录。
/mnt一般用做临时挂载某个文件系统,比如说u盘。
/tmp用于存放临时文件,我挂载为了ramfs,用于下载文件,应用程序放置,内存文件系统访问速度相当快,不比nand,加快了访问速度,而且增强了nand寿命。
/data目录
挂载为了yaffs2文件系统,可以用于读写,用于存储一些需要保存的数据。
5、制作jffs2
mkfs.jffs2 -r ./rootfs -o rootfs.jffs2 -e 0x20000 -p=0x1000000 -n
在使用过程中,请详细了解mkfs.jffs2各个参数的作用。 |
|