1. 触摸屏库Tslib移植
(1) 解压下载的tslib1.4压缩包
下载地址:
笔者这里没有使用tslib1.4。发现根本就无法测试。总是得不到按下信号。于是就下载了最新版的tslib。
#tar -zxvf kergoth-tslib-1.0-89.tar.gz
#cd tslib- kergoth-tslib-1.0-89
(2) 配置tslib编译项
#./autogen.sh (注意,就能执行一次,多执行的话可能linux重启后会崩溃很麻烦,要慎用哦)
./configure --prefix=/usr/local/tslib1.4/ CC=arm-linux-gcc \--host=arm-linux ac_cv_func_malloc_0_nonnull=yes --enable-inputapi=no
【注意】
./configure --prefix=/usr/local/tslib1.4/ CC=arm-linux-gcc \--host=arm-linux ac_cv_func_malloc_0_nonnull=yes --enable-inputapi=no
1)上面的—prefix后的/usr/local/tslib1.4/表示触摸屏tslib在目标板的路径!在编译安装的时候,先安装到宿主机的/usr/local/tslib1.4下,下载到开发板后依然要放在/usr/local/tslib1.4/下。
2)如果不添加ac_cv_func_malloc_0_nonnull=yes,则编译会出现错误:
undefined reference to `rpl_malloc'
(3) 编译tslib
#make
经过一小段时间的编译,如果没出错就OK了
(4) 安装tslib到宿主机的/usr/local/tslib1.4
#make install
(5) 修改/usr/local/tslib1.4/etc/ts.conf
把第二行的#号去掉,但其前面不能有空格!!!
(6) 复制tslib到开发板的相同路径(下面的路径是NFS中开发板的根位置)
#mkdir rootfs/usr/local //rootfs根据自己的根文件系统位置修改
#cp -arf /usr/local/tslib1.4/ /root/mywork/mini2440/rootfs/usr/local/
注意:/usr/local/tslib1.4/下的bin、lib、etc复制到开发板根文件系统下的/usr/local/tslib1.4下。
开发板中挂载linux:mount -t nfs -o nolock 192.168.40.101:/mnt /mnt/mywork/
注意,挂载时,linux中要关闭防火墙service iptables stop
(7) 配置tslib环境变量
(1) 检查开发板中的触摸屏设备
一种方式,观察启动过程,寻找touchscreen 字样。
在开发板根文件系统的/etc/profile中加入(黄色):
#LD_LIBRARY_PATH =/usr/lib:/lib #库的默认位置
export TSLIB_ROOT=/usr/local/tslib1.4 #触摸屏程序的根
export TSLIB_TSDEVICE=/dev/event0 #该行要根据触摸屏设备驱动生成设备号修改
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH #TSLIB库添加到搜索列表中
export TSLIB_FBDEVICE=/dev/fb0 #LCD设备
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts #插件目录
export TSLIB_CONSOLEDEVICE=none #控制台设备
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf #配置文件
export POINTERCAL_FILE=/etc/pointercal #鼠标校准文件
export TSLIB_CALIBFILE=/etc/pointercal #触摸校准文件
export QWS_MOUSE_PROTO='TSLIB:/dev/mouse0' #鼠标设备
保存退出后,执行如下命令重新加载环境变量(开发板中):
#source /etc/profile
(8) 触摸屏校准
校准的办法是进入开发板的tslib1.4文件夹:
#cd /usr/local/tslib1.4/bin
执行校准:
进入开发板的:
#cd /usr/local/tslib1.4/bin
执行:
#./ts_calibrate
这时候,屏幕上会出现“+”提示,用触摸笔点击“+”中心,随后会出现另外一个,同样的操作。依次完成5个“+”的校准。校准程序就会生成一个校准文件:/etc/pointercal
我的校准文件的内容如下:
-15552 96 1104588 32 21984 -19944688 -55648
该校准文件就是很多GUI程序使用的。比如QT等。
(9) 校准中错误的解决
Segmentation fault
说明ts.conf中的行前面有空格。删除非注释行前的空格即可。
No raw modules loaded.
则将ts.conf文件中的 #module_raw inpu 的注释符号去掉(左边不能留空格)。
selected device is not a touchscreen I understand
将ts.conf文件中的#module_raw h3600 的注释符号去掉(左边不能留空格)。如果依然错误,就尝试其它行的。
ts_config: No such file or directory
ts_read: Invalid argument
说明ts.conf中的配置项错误,比如module_raw h3600行前加注释,修改为其他的等待。
2. USB鼠标、键盘和扫描仪驱动
Linux-2.6.37内核对USB外设的支持是相当丰富的,并且已经包含了S3C2440的USB Host 驱动支持,因此只要配置一下内核就可以了,下面是各种USB 外设的详细配置步骤。
在内核源代码目录的终端输入:make menuconfig,依次选择如下子菜单项:
Device Drivers --->
[*] HID Devices --->
[*]USB Human Interface Device (full HID) support--->
键选中“USB Human Interface Device (full HID) support”,这样就配置好了USB键盘和鼠标项。这里的配置选项对应的内核源代码目录是:drivers/hid/usbhid,USB 键盘和条码扫描器的原理是一样的,因此它们的代码是相同的。重新编译进行测试即可。
#cd ../linux-2.6.37 //返回内核根目录
删除linux-2.6.37下的zImage并将arch/arm/boot/zImage复制到linux-2.6.37下
执行如下代码
./mkimage -A arm -T kernel -C none -O linux -a 0x30008000 -e 0x30008040 -d zImage -n 'jyb365_linux' kernel_uImage
执行命令make