zoukankan      html  css  js  c++  java
  • EasyARM-iMX283A的Linux 开发环境构建

    • Vim的安装

      

    sudo apt-get install vim

      等待安装完成后我们来配置简单配置vim的配置文件

    vim /etc/vim/vimrc

           (备注:自己一个人使用的^-^)
      在原来的基础上添加保存退出

     " 在窗口标题栏显示文件名称 
     set title
     " 编辑的时候将所有的 tab 设置为空格 
     set tabstop=4
     "设置自动对齐空格数 
     set shiftwidth=4
     "显示行号 
     set number
     "搜索时高亮显示 
     set hlsearch
     "不区分大小写 
     set ignorecase
     "语法高亮 
     syntax on
    View Code
    •     安装交叉编译器 gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2
      sudo tar xjvf gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 -C /opt/
    • 还需将该路径添加到 PATH环境变量中,其方法为:修改“/etc/profile”文件,具体操作方法如下

            

    sudo vim /etc/profile

        用 vim 编辑器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:

    export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/

     文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效

    source /etc/profile 

    备注也可以在~/.bashrc里面。或者在~/.bashrc里面加一句source /etc/profile

    兼容32位库(不同系统版本的指令有差异的)

    sudo apt-get install ia32-libs  

     

    sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

    测试一下:

    1、打印PATH信息

    2、在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux -gnueabi-前缀的命令

    3、查看arm-fsl-linux-gnueabi-gcc版本信息

    lin@lin-machine:~$ vim /etc/profile
    lin@lin-machine:~$ 
    lin@lin-machine:~$ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/
    lin@lin-machine:~$ arm-fsl-linux-gnueabi-
    arm-fsl-linux-gnueabi-addr2line     arm-fsl-linux-gnueabi-gprof
    arm-fsl-linux-gnueabi-ar            arm-fsl-linux-gnueabi-ld
    arm-fsl-linux-gnueabi-as            arm-fsl-linux-gnueabi-ldd
    arm-fsl-linux-gnueabi-c++           arm-fsl-linux-gnueabi-nm
    arm-fsl-linux-gnueabi-cc            arm-fsl-linux-gnueabi-objcopy
    arm-fsl-linux-gnueabi-c++filt       arm-fsl-linux-gnueabi-objdump
    arm-fsl-linux-gnueabi-cpp           arm-fsl-linux-gnueabi-populate
    arm-fsl-linux-gnueabi-ct-ng.config  arm-fsl-linux-gnueabi-ranlib
    arm-fsl-linux-gnueabi-g++           arm-fsl-linux-gnueabi-readelf
    arm-fsl-linux-gnueabi-gcc           arm-fsl-linux-gnueabi-run
    arm-fsl-linux-gnueabi-gcc-4.4.4     arm-fsl-linux-gnueabi-size
    arm-fsl-linux-gnueabi-gccbug        arm-fsl-linux-gnueabi-strings
    arm-fsl-linux-gnueabi-gcov          arm-fsl-linux-gnueabi-strip
    arm-fsl-linux-gnueabi-gdb           
    lin@lin-machine:~$ arm-fsl-linux-gnueabi-gcc -v
    Using built-in specs.
    Target: arm-fsl-linux-gnueabi
    Configured with: /work/arm-toolchains/tmp/src/gcc-4.4.4/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-fsl-linux-gnueabi --prefix=/work/arm_fsl_gcc_4.4.4_multilib --with-sysroot=/work/arm_fsl_gcc_4.4.4_multilib/arm-fsl-linux-gnueabi/multi-libs --enable-languages=c,c++ --with-pkgversion=4.4.4_09.06.2010 --enable-__cxa_atexit --disable-libmudflap --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-gmp=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --with-mpfr=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --with-ppl=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --with-cloog=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/work/arm_fsl_gcc_4.4.4_multilib/arm-fsl-linux-gnueabi/multi-libs --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long --enable-multilib --with-system-zlib --enable-lto
    Thread model: posix
    gcc version 4.4.4 (4.4.4_09.06.2010) 
    View Code

    来测一个文件的编译

    vim hello.c

    代码内容如下

    #include <stdio.h> 
    int main(void) 
    { 
        int i; 
        for (i=0; i<5; i++) { 
            printf("Hello %d!
    ", i); 
        } 
        return 0; 
    } 

    保存退出

    查看当前的文件

    lin@lin-machine:~$ ls
    bootloader                Documents         Music     Templates
    bootloader-v1.13.tar.bz2  Downloads         Pictures  Videos
    Desktop                   examples.desktop  Public    vmware-tools-distrib
    lin@lin-machine:~$ vim hello.c
    lin@lin-machine:~$ ls
    bootloader                Downloads         Pictures   vmware-tools-distrib
    bootloader-v1.13.tar.bz2  examples.desktop  Public
    Desktop                   hello.c           Templates
    Documents                 Music             Videos

    编译

    lin@lin-machine:~$ arm-fsl-linux-gnueabi-gcc hello.c -o hello

    再使用ls查看一下

    lin@lin-machine:~$ ls
    bootloader                Downloads         Music      Videos
    bootloader-v1.13.tar.bz2  examples.desktop  Pictures   vmware-tools-distrib
    Desktop                   hello             Public
    Documents                 hello.c           Templates

    使用file来查看hello文件

    lin@lin-machine:~$ file hello
    hello: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped
    •    编译 U-Boot

    先解压当前文件bootloader-v1.13.tar.bz2

    tar -jxvf bootloader-v1.13.tar.bz2 

    解压完成后

     cd bootloader/ 

    我们cd elftosb/
    在elftosb文件夹中添加elftosb_install.sh

    其具体代码如下

    echo " menu, please select your choice:"
    echo "  1 检测系统是多少位,自动安装"
    echo "  2 系统为32位选择elftosb_32bit"
    echo "  3 系统为64位选择elftosb_64bit"
    echo "  q   exit"
    
    i686fun() {    
        echo "系统为32位选择elftosb_32bit"  
        echo "/////////////////////////////"
        cp elftosb_32bit elftosb
        sudo cp elftosb /usr/bin/
        sudo chmod 777 /usr/bin/elftosb 
        sudo ls /usr/bin/ -li |grep elftosb
        echo "/////////////////////////////"
    }
    
    
    x86_64fun() {
        echo "系统为64位选择elftosb_64bit"     
        echo "/////////////////////////////"
        cp elftosb_64bit elftosb
        sudo cp elftosb /usr/bin/
        sudo chmod 777 /usr/bin/elftosb 
        sudo ls /usr/bin/ -li |grep elftosb
        echo "/////////////////////////////"
    }
    
    autofun() {
       
        echo "如何查看自己运行ubuntu是32位还是64位"  
        echo "如果显示i686,你安装了32位操作系统"
        echo "如果显示 x86_64,你安装了64位操作系统"        
        uname --m
    
        unameOut="$(uname --m)"
        case "${unameOut}" in
        i686*)      i686fun;;
        x86_64*)    x86_64fun;;
        *)          echo "UNKNOWN:${unameOut}"
        esac
    }
    
    
    
    read sel
    echo "select $sel"
    
    case $sel in
        [1]) autofun;;
        [2]) i686fun;;
        [3]) x86_64fun;;
        [q]) exit 0;;
        *)   echo "ONLY accept 1/2/3/q/Q"
    esac  
    View Code

    该脚本主要作用:是进行 u-boot 转换前需要先将 elftosb 目录下的“elftosb_32bit 或 elftosb_64bit”文件为原型复制一个为“elftosb”并复制到“/usr/bin/”目录下(请以用户搭建的 Linux 上位机系统位宽为准)。复制完后需要给 elftosb 赋予可执行的权限。

    修改改脚本的权限

    lin@lin-machine:~/bootloader/elftosb$ chmod 777 elftosb_install.sh
    lin@lin-machine:~/bootloader/elftosb$ ls -li | grep elftosb_install.sh
    1731787 -rwxrwxrwx 1 lin lin    1267 12月 24 22:51 elftosb_install.sh

     执行一下该脚本

    lin@lin-machine:~/bootloader/elftosb$ ./elftosb_install.sh 
     menu, please select your choice:
      1 检测系统是多少位,自动安装
      2 系统为32位选择elftosb_32bit
      3 系统为64位选择elftosb_64bit
      q   exit
    1
    select 1
    如何查看自己运行ubuntu是32位还是64位
    如果显示i686,你安装了32位操作系统
    如果显示 x86_64,你安装了64位操作系统
    x86_64
    系统为64位选择elftosb_64bit
    /////////////////////////////
    [sudo] password for lin: 
    528158 -rwxrwxrwx 1 root root    3256147 12月 25 09:34 elftosb
    /////////////////////////////

    我们现在cd u-boot-2009.08/后执行./build-uboot

    lin@lin-machine:~/bootloader$ cd u-boot-2009.08/
    lin@lin-machine:~/bootloader/u-boot-2009.08$ ls
                                  config.mk  examples      lib_generic     lib_ppc      mkuboot.sh   sbtool
    api                            COPYING    fs            lib_i386        lib_sh       nand_spl     si
    board                          cpu        include       lib_m68k        lib_sparc    net          tools
    build-uboot                    CREDITS    lib_arm       lib_microblaze  MAINTAINERS  onenand_ipl  u-boot.lds
    CHANGELOG                      disk       lib_avr32     lib_mips        MAKEALL      post         u-boot.map
    CHANGELOG-before-U-Boot-1.1.5  doc        lib_blackfin  lib_nios        Makefile     README       uboot_wdg.patch
    common                         drivers    libfdt        lib_nios2       mkconfig     rules.mk
    lin@lin-machine:~/bootloader/u-boot-2009.08$ ./build-uboot
    U-Boot build menu, please select your choice:
      1   make distclean
      2   config for mx28
      3   build U-Boot
      q   exit

    【备注】红色部分为脚本执行时的选择菜单。当出现该菜单时,输入对应的数字并按回车键即可。其中“build U-Boot”选项已经包含了将 u-boot 复制到 imx-bootlets-src-10.12.01 工程进行编译的操作,最终的编译结果位于 imx-bootlets-src-10.12.01 工程目录下。

    我们来查看一下/imx-bootlets-src-10.12.01/有那些文件。

    lin@lin-machine:~/bootloader/u-boot-2009.08$ cd ../imx-bootlets-src-10.12.01/
    lin@lin-machine:~/bootloader/imx-bootlets-src-10.12.01$ ls
    boot_prep      imx28_ivt_linux.sb  initramfs.cpio.gz  mach-mx23   si            uImage
    build          imx28_ivt_uboot.sb  linux.bd           mach-mx28   u-boot        updater.bd
    build_updater  imx28_linux.sb      linux_ivt.bd       Makefile    uboot.bd      updater_ivt.bd
    elftosb        imx28_uboot.sb      linux_prep         power_prep  uboot_ivt.bd  zImage

    补充一下

    制作 imx28_ivt_linux.sb 固件首先需求制作出来 zImage 文件,其来自下面的路径的

    lin@lin-machine:~/linux-2.6.35.3/arch/arm/boot$ ls
    bootp  compressed  Image  install.sh  Makefile  uImage  zImage

    现在介绍一下如何生产这个 zImage文件。

    现在我们先删除原来zImage

    回到~/linux-2.6.35.3

    设置内核对应的型号

    输入“make zImage”命令进行编译

    现在我们看编译完成后将在 arch/arm/boot/目录下生成 是否生产新的zImage 文件

     

    将zimage复制到 ~/bootloader/imx-bootlets-src-10.12.01

    cp arch/arm/boot/zImage ../bootloader/imx-bootlets-src-10.12.01 
    

    如果出现

    安装mkimage使用指令

     sudo apt-get install u-boot-tools

    或者将~/bootloader/u-boot-2009.08/tools/mkimage 复制到/usr/bin/mkimage

    lin@lin-machine: ~/bootloader/u-boot-2009.08/tools$ sudo cp mkimage /usr/bin/ 

    我们编译内核

    在“linux-2.6.35.3”目录下执行“make uImage”命令即可编译。编译完成后将在“arch/arm/boot”目录下生成内核固件 uImage。

    同样我们将uImage复制到 ~/bootloader/imx-bootlets-src-10.12.01

    cp arch/arm/boot/uImage ../bootloader/imx-bootlets-src-10.12.01 

    如果使用 USB 方式烧写到 EasyARM-iMX283 的 NAND Flash 时,请把该固件文件替换到 MtgTool  程序的“ProfilesMX28 Linux UpdateOS Firmwarefiles”目录

    【注意】

    Linux 内核启动时,是需要传入启动参数的;Linux 内核是由 U-Boot 引导启动时,启动参数是由 U-Boot 传递的。但是若系统直接从 Linux 内核启动,启动参数是由谁的传递呢?其实 imx28_ivt_linux.sb 固件中不单包含了 Linux内核代码,还包含了一段引导代码。当系统从 imx28_ivt_linux.sb 固件启动时,是先执行这一段引导代码。这段引导代码任务包含了初始化电源和一部分硬件设备,以及给即将启动的 Linux内核传递启动参数。


    那么启动参数用户如何来自定义呢?


    在 imx-bootlets-src-10.12.01 目录下 linux_prep/cmdlines/iMX28_EVK.txt文件内容如下:


    gpmi=g console=ttyAM0,115200n8 console=tty0 ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs fec_mac= ethact


    linux_prep/board/iMX28_EVK.c文件的 cmdline_def变量(在该文件的最后一行)的值为:  


    char cmdline_def[] = "gpmi=g console=ttyAM0,115200n8 ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs fec_mac=ethact";

    当用户需要修改 imx28_ivt_linux.sb 的启动参数时,这两个地方也要修改。

    当用户需要修改 imx28_ivt_linux.sb 的启动参数时,这两个地方均要修改,而且内容要保持一致。
    注意:固件由于更新,可能导致参数可能会不同,如果ubi.mtd 的值不为 5,请修改为 5,文件系统分区是位于 mtd5 分区,这样才能正常启动文件系统。

  • 相关阅读:
    在循环中禁止remove/add
    [算法竞赛入门]WERTYU
    [算法竞赛入门]Tex Quotes
    [算法竞赛入门]竖式问题
    [算法竞赛入门]蛇形填数
    [C++面试]关于const的使用方法
    [C++面试]单例模式-设计模式
    [C++面试]C++的三种继承(public/protected/private继承)
    用微服务架构,有哪些好处?
    东软数据可视化分析, 已经方便成这样?!
  • 原文地址:https://www.cnblogs.com/libra13179/p/10169602.html
Copyright © 2011-2022 走看看