分享

Linux 2.6.37内核移植到Mini2440(六)

 败败0619 2012-07-05

Linux 2.6.37内核移植到Mini2440(六)

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

重启nfs服务 service nfs restart

                   (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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多