作者: lizi

  • 在路由器LEDE系统上安装svn-server版本库(一)

    ps:文中提到的k3不是,是斐讯k3刷过lede的固件以后使用。

     

    家里有一个斐讯的k3路由器做主路由器,想着能用就这么一直用了。但是目前有时会有公司做不完的工作,需要家里加班,但是拷代码太费劲,版本也不好控制,所以就折腾在路由器上面搭一个。

    这个需要考虑的是,我这个路由器上并没有挂载硬盘,因为这个路由器的供电能力实在是太弱了,根本供不起移动硬盘,上次用的固态移动硬盘才是凑合能用,那个硬盘这次还是给别的地方用过了,所以手头暂时没有可以用的硬盘,这里就拿U盘挂载起来当主磁盘用了,虽然寿命是个问题,但是短时间用用应该没啥问题。

    首先要说就是我也不是一个大神,就是一个小菜鸟,当然遇到问题首先就是百度解决(也不会搭梯子,墙出不去,问不到古哥。)因为LEDE本身是带有软件包的安装功能,所以我就先去搜索了。搜索svn相关字眼并没有结果,很烦!!搜索git倒是有,但是我的项目是建立在svn上,只能作罢。于是百度关键字“lede svn-server”,也没有合适的结果,后来想到lede是openwrt的衍生版,而openwrt时间长了,应该有大神移植的软件,然后换关键字“openwrt svn-server”,果然不出所望有合适的结果。搜到链接:Openwrt 路由器上 安装 svn server 大神的文章简直就是指路明灯,于是我连命令都不用改的就安装了svn server。

    1.opkg update

    2.opkg install subversion-server

    3.cat /proc/mounts明确挂载点/tmp/mnt/sda4

    然后cd到目标挂载点,再就是按流程走了,这里不抄了。。会用就行

  • arm-linux嵌入式设备上中文输入法的实现

    这里要说的是,这里的实现并不是我自己写的,我只是借用了别人的,实际就是syszuxpinyin具体情况,可以自行百度。

    这里我先分享下源码链接: https://pan.baidu.com/s/1jHZ13D0 密码: igjw。

    这里简单说一下调用方法,我这里没有用dll的方式,而是直接用源码的方式编译到工程中。首先将源码包含到程序中,在需要调用的类中包含input.h文件。同时需要实现一个槽函数

    void confirmString(QString gemfield);

    具体来说,就是在在.h中定义

    void confirmString(QString gemfield);

    InputMethod *inputmethod;

    在cpp中调用

    构造inputmethod = new InputMethod(this);

    析构delete inputmethod;

    输入inputmethod->open();

    获取输入confirmString(QString gemfield)
    其中gemfield就是输入的内容

    也可以调用inputmethod->setcurrentString(curstr);来获取当前的内容。

    这里因为对网络的日志编辑器也不会用,反正就是说明白就行。也可以直接QQ371359001联系交流指导我一下。这里还有个没实现的,我突然想起来应该是可以写成单例模式,这里并没有实现,有空可以改改。还有就是我对源码做了一点更改,原本的是基于4.x做的,我给改了一点改成了5.x的了。反正很简单的改改,也没啥技术含量,所以具体的改哪里我都玩个。

  • 基于致远电子EPC-9600I-L工控主板的qt5.6移植

    20180228做了这个项目之后,几个月来没有做过类似技术的,都忘干净了,于是回来有看。这里感慨下,写了博客真好。

    并且对文中有解释的不够明确的用黑体字做了补充解释。

     

    公司的产品需求,做便携式仪器,最开始使用的wince系统的板子,后来又使用微型的winxp或者win7的桌面操作系统的板子,wince虽然稳定,但是上游厂商已经不做支持。原因有三点:

    1、微软原厂的策略,已不在WinCE系统上投入人力;
    2、基于微软的策略,IC原厂也不再提供对WinCE BSP的维护,新处理器已经不再提供WinCE BSP;
    3、当前各种外围模块厂家不提供对WinCE的驱动支持(比如摄像头、3G/WiFi/4G模块等众多重要外设)。

    (参考链接周立功

    而winxp  和win7等桌面操作系统的板子,因为系统的原因,在用户强制断电的情况下,经常性的系统奔溃。这里我们不得不投向顺应市场Linux系统产品。这里我们选择了周立功的9600i-l工控主板。

    EPC-9600I-L 是广州致远电子有限公司开发的基于 AM3352 处理器的工控主板。 板载 6RS232 串口(两路可通过软件切换,与 RS485 复用),两路 RS485 串口, 4 USB Host 2.0接口, 1 USB OTG1 10/100M 以太网接口、 2 CAN 接口、 1 TF 卡接口, 4 ADC1 路音频输入输出, 还有 16 TFT 液晶接口和 4 线电阻式触摸屏接口。

    这个工控主板完全可以满足我们的需求,而这里的编程 就是用的Qt,而以前的程序也是基于Qt开发,移植的工作量也是不会太大。

    这样就开始了,配到的屏是LCD_TM070RDH12_24B,一个7寸800×480的。板子拿到手以后,用配的fpc排线连接屏和板子,上电后会发现屏并不能正常亮。这里就是因为开发板烧写的内核是一个480×272的4.3寸屏的内核,所以我们需要烧写一个对于的800×480的7寸屏的内核。这里具体烧写办法,在zlg的资料里面都有,按说明操作就行了。

    下来就是调试了,这里就需要连接串口。这个工控板的接口不像一般的开发板一样是ttl电平,这个只能是rs232电平的。链接方法如图

    后边就是移植开发板的qt库,因为板子文件系统自带的qt环境是qt4.7.3,而我们的程序是用5.6开发的,这里就需要移植新的qt库,好在zlg对qt5.6做了移植,这里我也拿到了对应的qt库。具体的操作方法如下:

            先使用百度云盘下载做好的qt5,链接: http://pan.baidu.com/s/1bpnNiP5 密码: 6d5t。
            1,首先关闭板内QT环境初始化脚本。
                注释掉/etc/init.d/S90qt内的语句
            2,删除板内原本的4.7.3的固件。
                wr rm /usr/lib/libQt*
                wr rm -rf /usr/lib/qt
              wr rm /usr/bin/libQt*
                wr rm -rf /usr/bin/qt
              wr rm /usr/bin/ts_*
            3,解压qt5.tar.gz与tslib_sw.tar.bz2到/opt目录下,然后拷贝tslib_sw/bin/下的所有文件到/usr/bin/目录下。
    这里需要讲一下,因为Linux的软硬链接复制的时候,可能会有问题,所以需要打包复制,打包完成以后可以通过scp传到板子的制定目录下,如:
    scp qt5.tar.gz root@192.168.1.111:/opt/home按提示输入密码就行了。
    运行是碰到一个bug,国外的网站上找到了解决方案

     

            4,修改/etc/profile文件如下:
            export TSLIB_ROOT=/opt/tslib_sw
    export TSLIB_FBDEVICE=/dev/fb0
    export TSLIB_TSDEVICE=/dev/input/event0
    export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
    export TSLIB_CALIBFILE=/etc/pointeral
    export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib/export QT_ROOT=/opt/qt_install
    export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
    export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts/
    export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins/
    export QWS_MOUSE_PROTO=tslib:/dev/input/event0
    export QT_QPA_FB_TSLIB=1
    export QWS_DISPLAY=LinuxFB:/dev/fb0
    export QWS_SIZE=800X480
    export QT_QWS_FONTDIR=$QT_ROOT/lib/fonts
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QT_ROOT/libexport LD_PRELOAD=/lib/preloadable_libiconv.so
    然后source /etc/profile
    触屏校准。
                wr ts_calibrate
    这样环境变量就设置好了,在运行程序就可以正常了。但是在控制台就可以看到有一个iconv_openfailed的错误。这里就说要说到最后一个export LD_PRELOAD=/lib/preloadable_libiconv.so ,因为在编译qt的时候没有加-no-iconv 选项,所以只能单独编译一个libiconv。通过交叉编译工具链生成arm平台上的iconv链接库的方法如下:
    下载libiconv-1.14.tar.gz, 解压tar -xvf  libiconv-1.14.tar.gz
    ./configure –host=arm-none-linux-gnueabi –prefix=xxxxxxx ,完成后make (-j8表示8线程) 进入prefix指定的目录下lib目录下找preload,preload中有preloadable_libiconv.so,复制到上边的LD_PRELOAD路径就行了。
    复制进去后,再运行程序就不会报错了但是就有一个问题中文不能显示,这个就是因为没有中文的字库的原因了。这个问题就比较简单了。这个变量QT_QWS_FONTDIR指定的路径中的所有字体删除掉,只放入一个中文字体,重新运行程序 就会发现中文正常显示了。这个是因为系统在没有找到指定的字体的时候,只能用唯一的字体代替。自此,qt在arm-Linux的移植工作就算是完成了。这个要感谢指导过的大神和抱过的大腿了。
    也希望我的经历可以帮到后边的朋友。