解决Python交叉编译后,键盘方向键乱码的问题
2017-03-24 16:32
435 查看
参考
http://www.alliedjeep.com/38071.htmhttps://www.zhihu.com/question/21518507
http://professor.blog.51cto.com/996189/1618390/
概述
前面几篇博文介绍了Python交叉编译到ARM开发板上面,在使用的时候遇到一个问题,就是当按下键盘上面的方向键的时候看到的都是乱码。平台
主机: ubuntu14.04 64bit开发板: qemu + aarch64 (参考: http://www.cnblogs.com/pengdonglin137/p/6442583.html)
工具链: aarch64-linux-gnu-gcc (gcc version 4.9.1 20140529) 用于编译aarch64上面运行的程序
Python版本: Python-3.6.0 和 Python-2.7.13
解决
1、下载readline和termcap的源码
readline的下载链接:http://files.cnblogs.com/files/pengdonglin137/readline-7.0.tar.gz
或者 http://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz
termcap的下载链接:
http://files.cnblogs.com/files/pengdonglin137/termcap-1.3.1.tar.gz
或者 http://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
2、交叉编译
readline解压:
tar -xf readline-7.0.tar.gz mkdir aarch64 cd aarch64
配置、编译和安装 mk.sh:
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH ../readline-7.0/configure --host=aarch64-linux-gnu \ --prefix=`pwd` make -j4 make install
termcap
termcap编译稍微麻烦一点,需要手动修改configure生成的Makefile文件。
解压:
tar -xf termcap-1.3.1.tar.gz mkdir aarch64 cd aarch64
配置 mk1_conf.sh:
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH ../termcap-1.3.1/configure --host=aarch64-linux-gnu \ --prefix=`pwd`
修改Makefile
:
--- Makefile.orgin 2017-03-24 15:50:24.557379472 +0800 +++ Makefile 2017-03-24 15:50:32.749379210 +0800 @@ -21,9 +21,11 @@ srcdir = ../termcap-1.3.1 VPATH = ../termcap-1.3.1 -CC = gcc -AR = ar -RANLIB = ranlib +cross_compile = aarch64-linux-gnu- + +CC = ${cross_compile}gcc +AR = ${cross_compile}ar +RANLIB = ${cross_compile}ranlib INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644
即需要手动将修改工具链。
编译安装 mk2_make.sh:
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH make -j4 make install
3、配置Python3
修改mk1_conf.sh, 增加readline和termcap的lib和include路径#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH ../Python-3.6.0/configure \ --host=aarch64-linux-gnu \ --build=aarch64 \ --prefix=`pwd` \ --enable-ipv6 \ --enable-shared \ ac_cv_file__dev_ptmx="yes" \ ac_cv_file__dev_ptc="no" \ LDFLAGS="-L/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/lib \ -L/home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch64/lib \ -L/home/pengdonglin/src/qemu/python_cross_compile/Termcap/aarch64/lib" \ CPPFLAGS="-I/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/include \ -I/home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch64/include \ -I/home/pengdonglin/src/qemu/python_cross_compile/Termcap/aarch64/include"
修改完成之后,执行mk1_conf.sh
修改该Module/Setup文件
--- Setup.origin 2017-03-24 15:54:52.609370903 +0800 +++ Setup 2017-03-24 15:09:46.781457397 +0800 @@ -164,7 +164,7 @@ # it, depending on your system -- see the GNU readline instructions. # It's okay for this to be a shared library, too. -#readline readline.c -lreadline -ltermcap +readline readline.c -lreadline -ltermcap # Modules that should always be present (non UNIX dependent)
即将readline这一行取消注释
编译安装 mk2_make.sh
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH make -j4 make install
4、配置Python2
Python2跟Python3的处理方法稍有不同。修改mk1_conf.sh, 增加readline和termcap的lib和include路径
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin:$PATH ../Python-2.7.13/configure --prefix=`pwd` \ --host=arm-none-linux-gnueabi \ --build=x86_64-linux-gnu \ --enable-ipv6 \ --enable-shared \ ac_cv_file__dev_ptmx="yes" \ ac_cv_file__dev_ptc="no" \ LDFLAGS="-L/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/lib \ -L/home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch32/lib \ -L/home/pengdonglin/src/qemu/python_cross_compile/Termcap/aarch32/lib" \ CPPFLAGS="-I/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/include \ -I/home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch32/include \ -I/home/pengdonglin/src/qemu/python_cross_compile/Termcap/aarch32/include" \ LDLAST="-L/home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch32/lib \ -L/home/pengdonglin/src/qemu/python_cross_compile/Termcap/aarch32/lib"
跟Python3一样,添加readline和termcap的include和lib路径, 此外,还需要手动修改LDLAST的值,将readline和termcap的lib的路径添加到其中,否则在编译的时候会提示找不到l-lreadline和-ltermcap,然后执行./mk1_conf.sh
修改Modules/Setup
--- Setup.orig 2017-03-24 16:44:37.121275501 +0800 +++ Setup 2017-03-24 15:18:11.845441252 +0800 @@ -163,7 +163,7 @@ # it, depending on your system -- see the GNU readline instructions. # It's okay for this to be a shared library, too. -#readline readline.c -lreadline -ltermcap +readline readline.c -lreadline -ltermcap # Modules that should always be present (non UNIX dependent):
编译 mk2_make.sh
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH make HOSTPYTHON=../x86_64/python \ HOSTPGEN=../x86_64/Parser/pgen \ BLDSHARED="aarch64-linux-gnu-gcc -shared" \ CROSS_COMPILE=aarch64-linux-gnu- \ CROSS_COMPILE_TARGET=yes \ HOSTARCH=aarch64-linux-gnu \ BUILDARCH=x86_64-linux-gnu \ -j4
安装 mk3_install.sh
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH make install HOSTPYTHON=../x86_64/python \ BLDSHARED="aarch64-linux-gnu-gcc -shared" \ CROSS_COMPILE=arm-none-linux-gnueabi- \ CROSS_COMPILE_TARGET=yes \ prefix=`pwd`
5、修改制作ramdisk的脚本 mk_ramdisk.sh
#!/bin/bash export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH sudo rm -rf rootfs sudo rm -rf tmpfs sudo rm -rf ramdisk* sudo mkdir rootfs sudo cp ../busybox-1.24.2/_install/* rootfs/ -raf sudo mkdir -p rootfs/proc/ sudo mkdir -p rootfs/sys/ sudo mkdir -p rootfs/tmp/ sudo mkdir -p rootfs/root/ sudo mkdir -p rootfs/var/ sudo mkdir -p rootfs/mnt/ sudo cp etc rootfs/ -arf sudo mkdir -p rootfs/lib sudo cp -arf ../gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/aarch64-linux-gnu/libc/lib/aarch64-linux-gnu/* rootfs/lib/ #python version=3 sudo mkdir -p rootfs/usr pushd rootfs/usr sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/lib . sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/include . sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/bin . sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/share . sudo aarch64-linux-gnu-strip lib/python* popd version=2 pushd rootfs/usr sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/lib . sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/include . sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/bin . sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/share . sudo aarch64-linux-gnu-strip lib/python* popd #sqlite sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/bin/* rootfs/bin/ sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/include/* rootfs/include/ sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/lib/* rootfs/lib/ sudo strip rootfs/bin/sqlite3 #readline sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch64/include/* rootfs/include/ sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch64/lib/* rootfs/lib/ sudo mkdir -p rootfs/dev/ sudo mknod rootfs/dev/tty1 c 4 1 sudo mknod rootfs/dev/tty2 c 4 2 sudo mknod rootfs/dev/tty3 c 4 3 sudo mknod rootfs/dev/tty4 c 4 4 sudo mknod rootfs/dev/console c 5 1 sudo mknod rootfs/dev/null c 1 3 sudo rm rootfs/lib/*.a sudo rm rootfs/lib/*.la sudo aarch64-linux-gnu-strip rootfs/lib/* sudo mkdir -p rootfs/lib/modules/4\.10\.0\+ pushd rootfs/lib sudo ln -sf ld-2.19-2014.07.so ld-linux-aarch64.so.1 popd sudo mkdir -p rootfs/tools sudo cp ./other_tools/* rootfs/tools sudo dd if=/dev/zero of=ramdisk bs=1M count=300 sudo mkfs.ext4 -F ramdisk sudo mkdir -p tmpfs sudo mount -t ext4 ramdisk ./tmpfs/ -o loop sudo cp -raf rootfs/* tmpfs/ sudo umount tmpfs sudo gzip --best -c ramdisk > ramdisk.gz sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
这里我把Python3和Python2都拷贝到板子上面了, 同时别忘了拷贝readline和termcap的lib和include。如果提示空间不够的话,修改第75行的count的数值,这个要不能大于kernel里配置的值。
6、验证
经测试,在板子板子上面使用python3或者python2的时候,按键盘的方向键不会乱码。完。
修改Modules/Setup
相关文章推荐
- 解决CentOS 6.5中,Python-2.7.*交互模式下方向键、退格键等出现乱码的问题
- ipython 和 Python交互式模式下 键盘方向键乱码的解决方法
- Python命令行下退格、删除、方向键乱码问题解决(亲测有效)
- python 交互模式 方向键乱码问题解决
- 解决linux中,Python版本升级后,交互模式下方向键、退格键等出现乱码的问题
- Hudson中使用ant编译工程乱码问题的解决
- Python字符串的encode与decode研究心得——解决乱码问题
- 建立自己的交叉编译环境(米搞定,但解决了其中出现的很多问题)
- 编译安装mysql 5.1使用utf8解决乱码问题
- 解决httpclient在eclipse运行编码正常,ant编译打包后运行获取数据为乱码的问题(-Dfile.encoding)
- Python字符串的encode与decode研究心得乱码问题解决方法
- 解决 putty 使用小键盘数字键乱码的问题
- Python字符串的encode与decode研究心得乱码问题解决方法
- Python字符串的encode与decode研究心得——解决乱码问题
- 交叉编译库依赖问题的解决方法
- 解决Ubuntu删除/升级Python无法进入桌面以及控制台乱码问题
- Python Email应用的中文乱码问题解决方法
- ubuntu下eclipse编译的java项目乱码问题的解决
- 关于键盘过滤驱动中写入文件乱码的问题的解决!
- 编译安装mysql 5.1使用utf8解决乱码问题