• 建立树莓派raspberry交叉编译环境以及编译内核


        最近买了一个树莓派,玩了几天,虽然已经有很多人玩了,现在玩好像有点晚了,但是他确实是个好东西,学好它,对嵌入式的整个开发流程也就会熟悉很多.虽然性能不是很强和现在的BB-BLACK比有点慢了,但是它便宜,把它当做单片机也是个不错的选择.

        树莓派其实也是一个小的嵌入式产品,其实和我的TINY210一样,只不过他是基于ARM11架构,自然是ARMV6体系.构建交叉编译环境也就相对简单.

        环境:ubuntu 13.10

        个人原创,转载请注明原文地址:

           http://blog.csdn.net/embbnux/article/details/17360315

        参考:

            http://elinux.org/RPi_Kernel_Compilation#Use_the_provided_compiler

           http://shumeipai.nxez.com/2013/10/08/configure-cross-compiler-platform-raspberry-pi.html

     一   获得ARM GCC 交叉编译器

           

    cd work/raspberry
    git clone git://github.com/raspberrypi/tools.git

      这里官网下载可能比较慢,可以到我的资源下载 为 bcm2708hardfp编译器,和官方一样的

       http://download.csdn.net/detail/canyue102/6725615

     安装该编译器,把编译器路径加入到环境变量中:

    gedit ~/.bashrc

    在最后一行添加:

    export PATH=$PATH:/your_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/

    在终端执行:
      

    export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"

     注销后终端查看

    arm-bcm2708hardfp-linux-gnueabi-gcc -v

     /***********************************************************

       ubuntu 下也可以简单的用APT-GET 安装

    apt-get install gcc-arm-linux-gnueabi make ncurses-dev

      
    *******************************************************************/

    然后就安装好交叉编译器了.

     二  获取树莓派官方内核

        树莓派官方提供了移植好的内核源代码,也提供了移植的方法,可以自己从LINUX内核一步步移植,这以后深入学的时候再来看.

        首先下载内核

     

    git fetch git://github.com/raspberrypi/linux.git rpi-3.6.y:refs/remotes/origin/rpi-3.6.y

       进入内核目录:

    编辑根目录下的Makefile文件,找到下面相似语句,修改为下面:

    ARCH        ?= arm
    CROSS_COMPILE    ?= arm-bcm2708hardfp-linux-gnueabi-

    这样以后编译内核的时候就不用在指定交叉编译环境和平台的,只需简单的make

      然后就是内核配置了,配置命令和电脑上编译内核一样:

    make menuconfig
    
    
    
    

    进入配置界面选择需要编译的模块,其实就是更新.config文件,这里为了简便我们直接从树莓派中获取该文件.

    首先ssh 进入已经运行的树莓派

    zcat /proc/config.gz > .config

    将树莓派上得到的.config复制到电脑上的内核根目录,覆盖掉原来的.config

    在电脑上终端运行scp命令就可以了:

    scp pi@192.168.1.110:.config your_dir


    然后在make menuconfig ,就会预选了原来官方配置好的一些内核选项.


    然后只需要make就开始编译内核了,时间会有点长,先睡一觉

    经过一夜的奋战,它终于编译好了,内核目录下的arch/arm/boot/zImage文件,就是我们要的内核.

    然后是配置内核模块:

          在内核根目录下新建个modules文件夹,暂时把内核模块安装到这:

    mkdir modules
    make modules_install INSTALL_MOD_PATH=modules

         在modules就会有我们所编译好的内核模块

    三  将内核安装到树莓派运行的SD卡上

         树莓派没有片上集成NAND或者emmc,所以必须把系统和内核安装到SD上,插上SD卡后,才会运行.

         把之前已经刷好树莓派官方给的系统的SD卡插到电脑上,可以在disk工具下看到sd卡被分成两个区,第一个是boot区格式为fat32,在这个分区放置内核,第二个是debian文件系统区,格式为ext4,在SD卡的数据块开头留有4.2M的空间,这个应该就烧写boot的地方,不知是不是uboot这个目前还没了解到;

         在安装之前,先获取一下官方提供的firmware      

    git clone git://github.com/raspberrypi/firmware.git

         然后把我们之前编译生成的zImage转化为kernel.img

     用之前下载到的工具,在tools-master/mkimage/imagetool-uncompressed.py

    cd tools-master/mkimage
    ./imagetool-uncompressed.py  ../../linux-rpi-3.6.y/arch/arm/boot/zImage 
    
    

    然后就在该目录下生成 kernel.img文件.

      开始安装:

      1 .把该文件复制到 sd卡的boot分区覆盖掉原文件,怕失败的话,先备份好该分区下的文件.然后内核就安装好了.

      2 .把生成内核模块里面的modules和firmware文件夹复制到sd卡上系统分区里面的lib文件夹下替换相应文件.由于这个目录是root权限,所以在终端上执行命令:

      

    cd /media/me/your_sd_dir/lib
    sudo rm -r firmware
    sudo rm -r modules
    sudo cp -r /home/me/your_linux_kernel_dir/modules/lib/* ./
    


        3   .把之前下载得到的firmware/boot下  bootcode.bin fixup.dat start.elf的文件复制到sd卡的boot目录下覆盖原文件.

        4   .把下载得到的  firmware/hardfp/opt/下的vc文件夹复制到 sd卡上的 系统分区里面的opt文件夹下(因为之前用的是hf编译器):

     

    cd /media/me/your_sd_dir/opt
    sudo rm -r vc
    sudo cp -r /home/me/your_firmware_dir/hardfp/opt/* ./

      

        然后就完成了,把SD卡插到树莓派上启动吧. 可以用uname -a查看当前内核.

       

         








       




           

     

          

  • 相关阅读:
    基于MongoDB.Driver的扩展
    通用查询设计思想
    API接口通讯参数规范
    lambda简单记录
    list去重精简代码版
    spring boot file上传
    fastjson过滤器简单记录
    java读取properties文件
    list循环删除单个元素
    MapReduce运行流程分析
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3478902.html
Copyright © 2020-2023  润新知