arm移植_arm移植android - CSDN
精华内容
参与话题
  • arm linux 移植全部过程

    千次阅读 2019-05-19 11:56:41
    arm linux 移植全部过程总述功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个...

    总述

    之前做过linux在powerpc上的移植,当然过程曲折,内容不充实,也没有想过要写这样一篇文章,满足实际需求就可以。现在又在做arm移植,自己所用的工具、设备等都有了比较大的改进,那我觉得应该写一篇文章来记录一下,因为过程中的问题,不是简单几句命令就能解释的,而网上的文章真的是初学者的噩梦,没有条理不说,质量也不敢恭维。
    有的文章太细,都是在讲指令,大部分也都是抄来抄去,告诉大家照着步骤来就可以;而有的文章呢,则是在讲原理,类似于一些套话,读者想要的有可能只是一个可编译的环境,结果云里雾里不知所云。我是觉得理论与实践相结合是最合理的,如果有什么不对的地方,请留言,虽说只是自己的笔记,也需要对读者负责。当然,觉得我说的是废话,请右上角。

    面向的读者

    首先声明,作者水平有限,做嵌入式也只是开始,所以在现有这个阶段感觉困难重重。在克服了一些困难之后,觉得有些心得。所以,这篇文章,没有什么写作的目的,本来也是作者心血来潮准备普度众生_,从另一个角度上来讲算是一个笔记,所以更新说不定什么时候这腔热血没了也就停了。也就是说,这篇文章面向的对象一是那些处处寻门而不入的初学者,可以循序渐进的进入嵌入式的大门,再就是那些想要通过最简单的手段获取编译链的工程师,虽说是ARM但是思想我想很明确,是面向嵌入式的。总得来说,这是一篇嵌入式的文章,只要嵌入式系统或PC系统的工作模式不变,这篇文章都是可以作为参考的。

    正文

    现代计算机系统的工作模式

    写在最前面的是现代计算机系统的工作模式,为什么要讲这个呢,就是因为凡事要有始有终,总是要明白在一台计算机或嵌入式系统启动之后的工作流程。
    现代的计算机系统都是以CPU为核心运算单元和逻辑控制单元,加之一些外设而按要求构建的信息处理系统。CPU呢,只有运算功能,没有存储功能,这也就是为什么最初的CPU是用纸带的方式执行相关的运算流程。虽说我们生在21世纪,没必要去模拟当年的纸带机,但是CPU的启动过程是必须要明白的。

    BOOT-ROM

    最开始的计算机是由纸带打孔的方式输入执行程序的,随着计算机系统的不断发展,再加之懒人们的不断改进,最后输入计算机的程序,从纸片进入了ROM。
    我查阅了一些文献,如下:

    I/O devices that respond like memory components can be accessed through the processor’s physical-memory address space (see Figure 13-1). When using memory-mapped I/O, any of the processor’s instructions that reference memory can be used
    to access an I/O port located at a physical-memory address. For example, the MOV instruction can transfer data between any register and a memory-mapped I/O port.
    只要是可以像内存元件一样工作模式的I/O设备,都可以通过处理器的物理内存地址空间访问。
    The AND, OR, and TEST instructions may be used to manipulate bits in the control
    and status registers of a memory-mapped peripheral devices.

    这是Intel Architectures Software Developer中内存映射有关的内容,如图所示:
    Intel内存映射图
    在x86体系结构中,是没有片上ROM的,所以这个EPROM也就是我们所说的CMOS,就可以装载系统的初始化代码即,BIOS。而在ARM体系架构中,大部分SoC都集成了片上ROM,而这个ROM在ARM嵌入式的领域内被叫作BOOT-ROM。因为x86系统中外设大部分是由主板厂商设计,故BIOS通常是由主板厂商自行设计;而ARM系统中,因为ARM上通常会集成很多相关的外设及接口,故一般是由SoC厂商实现BOOT-ROM。
    因为BOOT-ROM的大小一般很小,通常情况下只能实现一些芯片内的初始化功能,以及将下一步的启动代码加载到内存中,然后将CPU控制权交给其执行。

    After the BSP and APs have been selected (by means of a hardware protocol, see Section 7.5.3, “MP Initialization Protocol Algorithm for Intel Xeon Processors”), the BSP begins executing BIOS boot-strap code (POST) at the normal IA-32 architecture starting address (FFFF FFF0H). The boot-strap code typically performs the following operations:
    1.Initializes memory.
    2.Loads the microcode update into the processor.
    3.Initializes the MTRRs.
    4.Enables the caches.
    5.Executes the CPUID instruction with a value of 0H in the EAX register, then reads the EBX, ECX, and EDX registers to determine if the BSP is “GenuineIntel.”
    6.Executes the CPUID instruction with a value of 1H in the EAX register, then saves the values in the EAX, ECX, and EDX registers in a system configuration space in RAM for use later.
    7.Loads start-up code for the AP to execute into a 4-KByte page in the lower 1 MByte of memory.
    8.Switches to protected mode and insures that the APIC address space is mapped to the strong uncacheable (UC) memory type.
    9.Determine the BSP’s APIC ID from the local APIC ID register (default is 0), the code snippet below is an example that applies to logical processors in a system whose local APIC units operate in xAPIC mode that APIC registers are accessed using memory mapped interface:
    MOV ESI, APIC_ID; Address of local APIC ID register
    MOV EAX, [ESI];
    AND EAX, 0FF000000H; Zero out all other bits except APIC ID
    MOV BOOT_ID, EAX; Save in memory
    Saves the APIC ID in the ACPI and MP tables and optionally in the system configuration
    space in RAM.

    懒得翻译了,0xFFFFFFF0H就是x86 CPU在上电时IP的指针位置,而由上图可知,这个位置正好位于EPROM的范围内。ARM应该也是如此,但是启动地址没有查看相关文档。

    U-Boot

    相关的项目介绍什么的都不写了,到处都能搜到。作用就是提供一些访问硬件资源的API,能够访问到后来操作系统启动所需的文件,并初始化相关的启动环境,然后加载镜像或压缩镜像到内存中,进行必要的操作(解压缩等)后,将CPU执行权交给操作系统(什么叫执行权?就是jump到一个内存地址,继续运行的指令就是操作系统的指令。

    Makfile

    请参看(uboot makefile注释),这里有注释,有兴趣可以看一下。

    展开全文
  • Qt5.7 移植ARM 开发板

    千次阅读 2018-08-16 10:53:26
    一、需要下载的文件, 下载qt5.7源码qt-everywhere-opensource-src-5.7.0.tar.xz ... 下载ARM交叉编译工具arm-2014.05-29-arm-none-Linux-gnueabi-i686-pc-linux-gnu.tar.bz2 http://www.veryarm....

    一、需要下载的文件,

    下载qt5.7源码qt-everywhere-opensource-src-5.7.0.tar.xz 
    http://www.download3k.com/Install-Qt.html

    下载ARM交叉编译工具arm-2014.05-29-arm-none-Linux-gnueabi-i686-pc-linux-gnu.tar.bz2 
    http://www.veryarm.com/arm-none-linux-gnueabi-gcc

    下载tslib1.4 
    http://vdisk.weibo.com/s/AcUHxOERV2k0?sudaref=www.baidu.com

    桌面系统是ubuntu14.04 32位 ,开发板目前搭载的系统是来自讯为的最小Linux系统。

    二、移植

    1.安装arm交叉编译器arm-2014,将下载的arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2解压到自己的安装目录,这里我选的是 /usr/local/arm  

    下来就是修改环境,打开etc/profile

    vi /etc/profile

    添加 

    export PATH=$PATH:/usr/local/arm/arm-2014.05/bin
    export CROSS_COMPILE=arm-none-linux-gnueabi-

    保存后 更新下  source /etc/profile

    控制台输入arm  按两下下table后如果出现arm-none-linux-gnueabi-gcc-4.8.3  说明可以了,也可以通过

    arm-none-linux-gnueabi-gcc -v  这条命令测试,如果出现一大串字母 ,最后一行是gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)  ,那就没问题了。

    2.安装tslib1.4

    将下载的tslib1.4解压到自己的目录 ,我选得是自己downloads文件夹 ,解压得到tslib1.4文件夹,在控制台进入这个文件夹,先安装一些东西,

    sudo apt-get install autoconf

    sudo apt-get install automake

    sudo apt-get install libtool

     

    安装完之后执行 

    ./autogen.sh
    然后
    ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi  --prefix=/opt/tslib1.4 ac_cv_func_malloc_0_nonnull=yes
    prefix是自己的安装目录,自己决定。
    最后 
    make
    sudo make install
    没出错的话就可以继续下一步了,出错了百度吧,估计是没安装什么东东。
    
    3. 编译Qt5.7的源码。
    在自己的downloads文件夹解压得到的源码,

    进入该文件夹,打开qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf  ,修改成下面的

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    #

    # qmake configuration for building with arm-linux-gnueabi-g++

    #

     

    MAKEFILE_GENERATOR      = UNIX

    CONFIG                 += incremental

    QMAKE_INCREMENTAL_STYLE = sublib

     

    QT_QPA_DEFAULT_PLATFORM = linux #eglfs

    QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a

    QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

     

    include(../common/linux.conf)

    include(../common/gcc-base-unix.conf)

    include(../common/g++-unix.conf)

     

    # modifications to g++.conf

    QMAKE_CC                = arm-none-linux-gnueabi-gcc

    QMAKE_CXX               = arm-none-linux-gnueabi-g++

    QMAKE_LINK              = arm-none-linux-gnueabi-g++

    QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

     

    # modifications to linux.conf

    QMAKE_AR                = arm-none-linux-gnueabi-ar cqs

    QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy

    QMAKE_NM                = arm-none-linux-gnueabi-nm -P

    QMAKE_STRIP             = arm-none-linux-gnueabi-strip

    load(qt_config)

     执行

    1

    ./configure -release -opensource -tslib -xplatform linux-arm-gnueabi-g++ -prefix /opt/Qt-5.5.0/armv7-a -no-c++11 -no-opengl -I/opt/tslib1.4/include -L/opt/tslib1.4/lib

    没有错误的话 就 make && make install

    到安装文件夹下就出现了安装的文件

    那就成功了。

    三、安装qt-crearor3.3.0  

    从http://mirrors.hust.edu.cn/qtproject/archive/qt/   下载需要的版本,直接运行 ,一路 next 下去就行了。

    打开安装的qtcreator ,设置开发环境,如下图

     

     

    OK  用过windows版本的qt这应该没什么难度。

    四 、程序测试。

    将编译好的tslib1.4 和qt整个文件夹 拷贝到开发板的/opt目录,

    修改开发板环境:vi /etc/profile

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    export TSLIB_ROOT=/opt/tslib1.4

    export QT_ROOT=/opt/qt-5.7.0  

    export TSLIB_TSDEVICE=/dev/input/event2

    export TSLIB_TSEVENTTYPE=input        

    export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf

    export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts   

    export TSLIB_CONSOLEDEVICE=none               

    export TSLIB_FBDEVICE=/dev/fb0            

    export QWS_MOUSE_PROTO=tslib:/dev/input/event2

    export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/

    export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins                                             

    export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0                                                     

    export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts          

    export QT_QPA_GENERIC_PLUGINS=tslib

      QT_ROOT是qt库的目录。更新 source /etc/profile

     

    然后在串口命令窗中输入 vi /opt/tslib1.4/etc/ts.conf 来配置触摸屏 

    删除第二行前面的#就可以了,如果出错重新打开修改第二行,去掉空格和#

     

     

    一切搞完之后就可以编写qt程序了,将编译后的程序用u盘复制到开发板,./program  就可以运行了,但十有八九会报错缺少libstdc++.so  所以要复制一个libstdc++.so到lib目录下,到此,搞定。

    下面是我用的libstdc++.so。

    http://pan.baidu.com/s/1nvJbRB

    hb1m

     

    整个过程中很感谢 刘大神、彩阳博主和一名热心网友的帮助。

    参考的:

    http://www.cnblogs.com/topeet/p/5711957.html

    http://blog.csdn.net/u012175418/article/details/52704734?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

    http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html

    展开全文
  • 非常详细的移植文档,可以让刚开始从事相关工作的人快速入门。
  • ARM开发板移植Python的各种坑

    万次阅读 2018-08-30 11:13:21
    一、准备 资料准备: 1.Python-2.7.2.tar.bz2 官网可下载 2.Python-2.7.2-xcompile.patch 网上找的,具体来源不明,需要与Python版本相同 3交叉编译器 gcc-3.4.5-glibc-2.3.6,一定要用开发板资料里带的与...

    一、准备

    资料准备:

    1.Python-2.7.2.tar.bz2  官网可下载

    2.Python-2.7.2-xcompile.patch   网上找的,具体来源不明,需要与Python版本相同

    3交叉编译器 gcc-3.4.5-glibc-2.3.6,一定要用开发板资料里带的与开发板匹配的交叉编译器,此处有大坑

    二、流程梳理(正常流程)

    1.下载上述文件

    2.安装交叉编译器(PC中操作,64位 Ubuntu 16.04 )

    (1)将开发板资料里的 arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 解压到 /opt (可自己选择,后续配置环境变量时对应即可)中。

    (2)shell中运行

    sudo gedit /etc/profile

              在文档最后添加 export  PATH="$PATH:/opt/gcc-3.4.5-glibc-2.3.6/bin" ,路径与上述解压路径对应

              运行 source 指令使环境变量生效,也可重启使之生效

    source /etc/profile

              运行下边指令验证环境变量是否配置成功 ,成功会显示版本号

    arm-linux-gcc -v

     

    3.交叉编译Python源码

    (1)将Python源码 Python-2.7.2.tar.bz2 与 Python-2.7.2-xcompile.patch  移动到同一文件夹,解压源码

    tar xjvf Python-2.7.2.tar.bz2   #解压出 Python-2.7.2 文件夹
    
    cd Python-2.7.2                 #进入 Python-2.7.2

    (2)编译HOST版解释器

    编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出HOST的解释器。

    ./configure                            #
    make python Parser/pgen                #
    mv  python  hostpython                 #
    mv  Parser/pgen  Parser/hostpgen       #
    make distclean                         #

    (3)打补丁 

    patch -p1 < ../Python-2.7.2-xcompile.patch

    (4)交叉编译配置

    设置交叉编译工具链为arm-linux(根据交叉编译器设定),编译生成的执行文件存放目录为上层目录的_install文件夹。

    创建 cc1.sh 文件,打开编辑,

    #!/bin/sh
    CC = arm-linux-gcc                #与要使用的交叉编译器对应
    CXX= arm-linux-g++                #与要使用的交叉编译器对应
    AR = arm-linux-ar                 #与要使用的交叉编译器对应
    RANLIB=arm-linux-ranlib
     ./configure --host=arm-linux --prefix=$PWD/../Install \
         --build=x86_64-linux-gnu \
    #	 --enable-readline	\
    #    --enable-ipv6 \
    #    --enable-shared \
         ac_cv_file__dev_ptmx="yes" \
         ac_cv_file__dev_ptc="no"
    
    

    添加可执行权限 

    chmod +x cc1.sh

    (5)编译&安装

    创建 cc2.sh 、cc3.sh 文件,打开编辑,并添加可执行权限 

    #!/bin/sh
    #cc2.sh
    make  HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen 
    BLDSHARED="arm-linux-gcc -shared"  \                #与要使用的交叉编译器对应
    CROSS_COMPILE=arm-linux- \ 
    CROSS_COMPILE_TARGET=yes \
    #!/bin/sh
    #cc3.sh
    make install HOSTPYTHON=./hostpython \
         BLDSHARED="arm-linux-gcc -shared" \           #与要使用的交叉编译器对应
         CROSS_COMPILE=arm-linux- \
         CROSS_COMPILE_TARGET=yes \
         prefix=$PWD/../_Install
    
    chmod +x cc2.sh cc3.sh

    (6)依次运行cc1.sh,cc2.sh,cc3.sh

    成功后在上层文件夹下的 _install 文件夹中,会出现以下4个文件夹,

     进入 bin文件夹,运行 ./python ,出现如下提示,说明交叉编译成功

     

     (7)将_install 文件夹打包 Python-2.7.2_install.tar.bz2 

    tar cjvf Python-2.7.2_install4.tar.bz2 _install/

    (8)通过虚拟机WinPC 或另一台window 电脑,使用SecureCRT 将 Python-2.7.2_install.tar.bz2 传到 ARM 开发板上

    ftpget -p 21 <开发板IP> Python-2.7.2_install4.tar.bz2 /ToArm/Python-2.7.2_install4.tar.bz2

    /ToArm 是SecureCRT 配置的本地路径

    (9)在开发板上解压 Python-2.7.2_install.tar.bz2 

    进入 _install/bin文件夹,执行 ./python ,成功


    4.总结填坑

    (1)运行cc2.sh、cc3.sh 时 ,提示:unable to execute arm-linux-gcc: No such file or directory 

           运行结束后进入生成的_Install/bin,运行./python,显示 [GCC 5.4.0 20160609] on linux,GCC版本与之前设置的交叉编译版本不一致,说明没有真正使用交叉编译器,而是使用系统默认的 x86_64-linux-gnu-gcc  编译器,此版本拷贝到开发板上输入./python是不能运行的,会提示带乱码的报错信息。

    填坑:unable to execute arm-linux-gcc: No such file or directory的原因发现了2个:

    1)交叉编译器 gcc 是 32 位,在64位系统上运行,需要安装 ia32-libs (已失效),替换安装 lib32ncurses5 和 lib32z1

    2)运行 cc1.sh 、cc2.sh、cc3.sh 时不要 sudo(深坑) ,开始运行是习惯性的加了sudo,怎么都不行,多次实验后才发现去掉sudo才可以正常编译。

    (2)交叉编译器版本

    开发板资源包中的交叉编译器版本为 gcc-3.4.5-glibc-2.3.6,在处理上面问题时,怀疑过交叉编译器版本过旧的原因,在网上找了个 arm-linux-gcc-4.4.3-20100728.tar.gz,于是给自己又挖了个深坑。

    通过上述(1)的方法,解决了unable to execute arm-linux-gcc: No such file or directory的问题,一路编译通过,上板运行,满怀希望,于是激动的出现了 -sh : ./python :not found(事后验证,如果交叉编译器使用原开发板系统原配的对应版本,此问题不会出现),什么鬼,百度、google一番,因为缺少库文件,在PC上使用

    arm-linux-readelf -a ./python >2.txt

    提示缺少/lib/ld-linux.so.3,到交叉编译器arm-linux-gcc-4.4.3-20100728.tar.gz解压出来的包中找到 ld-linux.so.3,拷贝到开发板 /lib 下,再次回到python文件夹下运行 ./python,-sh: ./python: Permission denied,噗!!!

    是没有运行权限吗? chmod +x python 不行, chmod 777 python 还不行,什么情况啊,继续百goo,终于在某个角落提到编译器版本问题,换回原版 gcc-3.4.5-glibc-2.3.6 重新来过,一路下来,竟然一次通过。./python 终于出现了理想中的界面

    事后总结:经过验证,如果交叉编译器使用正确的版本,即 gcc-3.4.5-glibc-2.3.6,依赖的库为  ld-linux.so.2,此库文件在开发板 /lib 中已经存在,所以在运行 ./python 是并不会出现  -sh : ./python :not found,后面也不会出现 -sh: ./python: Permission denied。

     

     

     


    反思:填坑 = 学习

    作为一个新手,一路跌跌撞撞,总算解决一个在别人看来可能都不值一提的问题,以至于在网上都不能找到几条同样问题的资料。遇到的各种坑,有些是因为我使用的开发板和网上教程使用的开发板有所区别,有些纯粹是自己给自己找麻烦,但是归根结底,还是因为自己是初学,知识积累有限,遇到问题没有方向,不知道该往哪些方面去思考、去查资料。经过这一番折腾,对ARM移植Python的过程有了一个梳理,同时对交叉编译有了一个大致的了解,在触及类似问题时,也有了大致的解决方向。

    至于碰到的各种坑,在填的时候,是各种咬牙切齿。但是在填完之后,有的只是感激。

    对于我这样一个刚接触嵌入式的新手来说,如果没有遇到各种各样的问题,一切按照网上的示例教程,一帆风顺的照葫芦画瓢,没有思考,没有实践,我可能能够快速的搭建起特定的应用场景,但是一旦碰到哪怕一丁点特殊情况,依然会被打回原形,不知所措。所以,填坑的过程,就是学习进步的过程,我很庆幸碰到了那么多坑,也很庆幸误打误撞的给自己挖了那么多坑,让我在入门的时候多学一些,多想一些,多积累一些。

    展开全文
  • ARM40之Python3.6.4移植

    千次阅读 2018-03-29 16:48:21
    准备 默认以下所列举的软件都已安装完毕,主机和目标机可以通讯。 主机平台:Ubuntu 16.04 LTS(x64) ...编译工具链:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi 终端工具:putty,sec...

    准备

    默认以下所列举的软件都已安装完毕,主机和目标机可以通讯。

    • 主机平台:Ubuntu 16.04 LTS(x64)
    • 目标平台:ARM40-A5D3
    • 虚拟机:VMware® Workstation 12 Pro
    • Python版本:Python3.6.4
    • 编译工具链:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi
    • 终端工具:putty,secureCRT

    部署zlib

    downzlib.png

    • 预编译zlib

    为什么要先编译zlib?因为zlib模块为python压缩方法提供支持。
    如果不预先编译zlib,编译python的时候就会报“zlib 模块找不到”的错误。
    编译Ubuntu(PC版),ARM版两个版本的zlib,为下面的交叉编译Python-3.6.4做准备。
    注意:zlib的configure不支持用CC变量来指定交叉工具链。

    $ cd ~
    $ tar xzvf zlib-1.2.11.tar.gz
    $ ls
    $ cd zlib-1.2.11/
    $ ls
    

    lszlib.png

    编译Ubuntu(PC版)zlib:

    $ ./configure
    $ make
    $ sudo make install
    $ exit
    

    makezlib.png

    编译ARM版zlib:

    $ cd ~/zlib-1.2.11/
    $ sudo mkdir /opt/zlib
    $ export CC=arm-linux-gnueabi-gcc
    $ ./configure  --prefix=/opt/zlib
    $ make
    $ sudo make install
    $ exit
    

    arm-zlib.png

    部署Ubuntu Python3.6.4

    downpython.png

    • 解压Python3.6.4源代码

    将下载的Python3.6.4源代码复制到虚拟机Ubuntu中,解压到指定目录。默认是当前用户目录下。

    $ cd ~
    $ ls
    $ xz -d Python-3.6.4.tar.xz
    $ ls
    $ tar xvf Python-3.6.4.tar
    $ cd Python-3.6.4/
    $ ls
    

    xdpython.png
    inpython.png

    • 更新Ubuntu Python3版本

    Ubuntu上python3的版本大于3.6.4,请跳过此步骤。

    $ python3 -V
    

    1)Ubuntu上的python3的版本不能低于3.6.4,否则在交叉编译Python-3.6.4的时候就会失败!默认Ubuntu python为最新版本,如果不是,需要手动编译安装Python-3.6.4。
    2)编译Python-3.6.4前必须修改Python-3.6.4/Modules/Setup.dist文件,
    否则编译过程中有可能会报“zlib 模块找不到”的错误。

    $ python3 -V
    $ cd ~/Python-3.6.4/
    $ ls
    $ vim Modules/Setup.dist
    $ ./configure
    $ make
    $ sudo make install
    

    zlib-insert.png

    编译ARM Python3.6.4

    • 创建Ubuntu版本的pgen

    1)在交叉编译Python时,需要用到pgen解释器。
    如果编译的是ARM架构的解释器,是不能在PC上运行的,会导致编译失败。
    所以要预先编译出一个能Ubuntu上运行的pgen。

    $ cd ~/Python-3.6.4/
    $ make distclean  
    $ ls
    $ ./configure
    $ make Parser/pgen
    

    makegen.png

    • 交叉编译python3.6.4

    1)在Python-3.6.4目录下,创建build-arm40的目录;
    交叉编译python,将在这个目录下进行。
    2)在/opt目录下创建python3目录;
    将交叉编译好的zlib库,复制到python3目录下,注意这一步很关键。
    注意…/configure,“/”的前面是有两个点的。

    $ cd ~/Python-3.6.4/
    $ mkdir build-arm40
    $ cd build-arm40
    $ sudo mkdir /opt/python3
    $ sudo cp -rfp /opt/zlib/* /opt/python3/
    $ ls /opt/python3/
    $ ../configure CC=arm-linux-gnueabi-gcc \
                  CXX=arm-linux-gnueabi-g++ \
                  AR=arm-linux-gnueabi-ar \
                  RANLIB=arm-linux-gnueabi-ranlib \
                  --host=arm-linux-gnueabi \
                  --build=x86_64-linux-gnu \
                  --target=arm-linux-gnueabi \
                  --disable-ipv6 \
                  --prefix=/opt/python3 \
                  --with-ensurepip=yes \
                  --enable-optimizations \
                  ac_cv_file__dev_ptmx=yes \
                  ac_cv_file__dev_ptc=yes            
    

    configure2.png

    不要急着make,下面的步骤很关键。
    1)将刚才创建好的Ubuntu版本的pgen,复制到build-arm40的Parser目录下。
    2)交叉编译Python-3.6.4前必须修改Modules/Setup文件,否则编译过程中有可能会报“zlib 模块找不到”的错误。
    3)touch –t 12312359 ./Parser/pgen ; 将pgen文件的日期改为今年的最后一分钟生成的。为什么需要这一步?因为arm版python在make时,会生成它的pgen,就会把刚才复制过来的pgen给替换掉,改成未来的时间,就会忽略跳过。引用1

    $ cd build-arm40
    $ ls
    $ cp ../Parser/pgen ./Parser/
    $ ll ./Parser/
    $ touch -t 12312359 ./Parser/pgen
    $ ll ./Parser/
    $ vim Modules/Setup
    

    touch-gen2.png
    zlib-insert.png

    4)切换到root账户进行make,以防由于环境变量不一致的导致编译错误。
    5)编辑root环境下的.bashrc文件,并使交叉编译器生效。

    在.bashrc文件末尾添加
    export PATH=/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin:$PATH

    $ su -
    root# cd ~
    root# vim .bashrc
    root# source .bashrc
    root# echo $PATH
    root# cd /home/ubt1604/Python-3.6.4/build-arm40/
    root# make
    root# make install
    

    root-gcc.png
    root-bashrc2.png

    关于报错:主要是zlib缺失,gcc交叉编译工具链路径或者环境变量的问题。
    编译python3.6.4结束了,下面将它移植ARM40上。

    移植ARM Python3.6.4

    • ARM40 Python3文件部署

    1)将Ubuntu /opt目录下的python3目录进行打包;
    2)通过NFS将它解压到ARM40的/opt目录下。

    $ cd /opt/
    $ sudo tar cvf python3.tar python3/
    $ ls
    $ sudo mv python3.tar /home/nfsroot/
    $ ls /home/nfsroot/
    

    py3.tar.png

    登录到ARM40,使用NFS连接到Ubuntu nfs共享目录/home/nfsroot
    默认ARM40 IP地址:192.168.6.5;Ubuntu默认IP地址:192.168.6.10;

    root@ARM40:# cd /home
    root@ARM40:# mkdir nfsroot
    root@ARM40:# ls
    root@ARM40:# ls
    root@ARM40:# mount -t nfs -o nolock 192.168.6.10:/home/nfsroot /home/nfsroot
    root@ARM40:# cd nfsroot/
    root@ARM40:# ls
    root@ARM40:# tar xvf python3.tar -C /opt/
    root@ARM40:# ls /opt/
    root@ARM40:# cd /opt/python3/bin/
    root@ARM40:# ./python3.6 -V
    >>Python 3.6.4
    

    arm_python.tar.png
    arm_python.zlib.png

    至此,Python3.6.4移植结束。

    参考引用

    展开全文
  • 一. 前言 面向A R M 微处理器构架的嵌入式操作系统的使用量将在今后五年... 目前,ARMLinux 支持包括A R M 6 1 0 、A R M 7 1 0、A R M 7 2 0 Tcores、ARM920T cores、StrongARM110、StrongARM 1100、XScale 等系列...
  • json-c arm移植

    千次阅读 2015-04-25 23:10:35
    json-c JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C, output them as JSON formatted strings and parse JSON formatted strings back into th
  • Android系统移植之arm移植步骤

    千次阅读 2011-07-20 08:39:02
    Android Porting Steps for ARMhe following are the porting steps.0. Setting Compiler- Environment variables for ARM compiler- export ARCH=arm
  • linux下ftp服务器ARM移植

    千次阅读 2016-04-07 21:34:08
    linux下ftp服务器ARM移植   操作系统:ubuntu 14.04 + VMware 10 交叉编译器:arm-linux-gcc 4.8.3 ftp服务器文件包:vsftpd-2.0.4.tar.gz   一、准备源文件  解压缩ftp服务器压缩包:  tar xf vsftpd-2.0.4.tar...
  • ARm 移植最新版QT5.12

    千次阅读 2019-02-21 13:32:45
    转载:https://blog.csdn.net/weixin_37771089/article/details/84989447 一、 准备 ubuntu:12.04 源码:http://download.qt.io/archive/qt/5.12/5.12.0/single/ 工具链:...
  • arm内核移植过程 转自:http://student.csdn.net/space.php?uid=366890&do=blog&id=28865<br />1 内核移植过程   1.1 下载linux 内核    从...
  • libpcap arm移植

    千次阅读 2015-04-26 07:44:34
    libpcap a portable C/C++ library for network traffic capture. 下载 http://www.tcpdump.org/#latest-release 或者到这里:... 编译 ...注:此处使用 arm-linux-gnue
  • ARM移植file命令

    千次阅读 2017-05-16 11:25:23
    ARM移植file命令的详细步骤: 1、下载file 源代码 从下面ftp 站点下载Linux file 命令源代码file-5.04.tar.gz ftp://ftp.astron.com/pub/file 2、使用tar 命令对文件进行解压。 -C选项是指定解压目录 tar xvzf ...
  • linux环境下ARM移植libcurl

    千次阅读 2018-01-22 17:50:03
    因为用的板子是ZLG的imx280a,所以我安装的Ubuntu直接用他们给的了。 系统环境:VM-Ubuntu-12.04-64bit-zlg(这个无所谓,我直接用的ZLG官方给的镜像安装的) ...交叉编译环境:arm-none-linux-gnuea
  • DBUS ARM 移植

    千次阅读 2019-01-02 15:07:42
    dbus-1.5.0.tar.gz ...DBUS移植 ./configure --host=arm-linux-gnueabihf --prefix=/opt/rootnfs/dbusdev/expat-2.2.0/expatInstall ./configure --host=arm-linux-gnueabihf --prefix=/opt/...
  • SSH arm移植(实现远程登录开发板)

    千次阅读 2019-07-09 16:38:04
    移植ssh到开发板主要是将开发板当成服务器,电脑端可以作为客户端进行访问,从而实现通过网线就可以进行文件的传输以及控制台控制。 移植ssh主要包含三大部分:1. zlib的移植; 2. openssl的移植; 3. openssh的移植...
  • opencv(arm移植总结)

    千次阅读 2011-10-18 20:16:39
    偶然看到一个当时自己移植opencv的总结, 当时用了一个月才弄明白怎么回事, 这里放到这里, 一是保留,也希望其他人能在这里节省时间。 嵌入式ARM系统中安装 这里使用的是Opencv1.0.0版。 首先说明...
  • Linphone-3.2.0的X86编译与ARM移植

    千次阅读 2009-10-15 12:34:00
    Linphone在Linux X86下的编译 (一) Linphone依赖库准备: libogg-1.1.3.tar.gz(http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz) speex-1.2beta3.tar.gz(依赖于libogg) libosip2-3.3.0.ta
  • ARM移植rz和sz命令

    2019-01-22 21:28:25
    摘要: 本文讲的是ARM移植rz和sz命令, 嵌入式Linux移植rz和sz命令 rz、sz是Linux/Unix 同Windows 进行ZModem 文件传输的命令行工具,windows 端需要支持ZModem 的telnet/ssh 客户端,例如:SecureCRT 教程 云栖...
  • ARM移植lftp

    千次阅读 2017-12-01 17:37:35
    转载请注明出处 版本:4.8.3 依赖的库(需在编译lftp前,编译完成,编译方法可自行百度or谷歌): ncurses readline(需要5.0版本之上) openssl zlib 1. 下载lftp包 ...tar -zxf lftp-4.8.3
1 2 3 4 5 ... 20
收藏数 60,962
精华内容 24,384
关键字:

arm移植