虽然网上有那么多python的交叉编译移植教程,但是方法差异蛮大,需要根据实际开发板的型号做调整,以下是适用于海思的板子移植过程。
step 1. python版本从网上下就可以;
step 2. 解压;
step 3. 新建一个目录用以编译pc版python,再编译pgen出来,用于生成语法解析器;
mkdir build.pc cd build.pc ../configure make
cd..
step 4. 配置 和编译CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ ./configure --host=arm-linux --prefix=/home/jhb/nfs/Python-2.7.3/python_install
step 5.
修改setup.py detect_modules函数: 函数的前两行是把/usr/local加到搜索目录中,我们的cross compiler一般不会直接安装在 /usr/local里面的,所以这两行去掉: add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
step 6.
之后就要对Makefile做一些修改: (1)把 # OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes OPT= -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes 一行中,去掉-g,我们不要debug python,-O3改为-O2,空间紧张O2就可以了。 (2)在: PGEN= Parser/pgen$(EXE) 一行的下面加上: PGEN_HOST= build.pc/Parser/pgen$(EXE) 表明我们在HOST上运行的pgen。 (3)在要使用PGEN的地方改为PGEN_HOST: $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) 改为: $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) -$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) (4)修改所有使用新生成的python的地方。 在BUILDPYTHON变量下面定义一个变量:PYTHON_HOST=build.pc/python$(EXE),然后将所有./$(BUILDPYTHON)的地方都换成./$(PYTHON_HOST)。
step 7. make 会出现错误
Include/pyport.h:243: error: #error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG" 修改pyconfig.h: 找到#undef PY_FORMAT_LONG_LONG 处加:#define PY_FORMAT_LONG_LONG "ll"
make test
make install
step 8. 此时在开发板上./python可以运行。
step 9. 设置环境变量
export PYTHONHOME=/root/xbmc/python_install-test export PYTHONPATH=$PYTHONHOME:$PYTHONHOME/lib/python2.7:$PYTHONHOME/lib:$PYTHONHOME/lib/python2.7/site-packages export PATH=$PATH:$PYTHONHOME:$PYTHONPATH
移植python的目的是为了使用一个叫speedtest的网速测试工具,它使用python 脚本语言编写,linux上测试网速的工具很多,但是适用于开发板的却少的可怜,因此需要移植python来支持speedtest。