zoukankan      html  css  js  c++  java
  • 如何编译树莓派内核

    老实说,对于从来没有用过玩过Linux(甚至没有基本的Linux管理经验)的我来说,编译内核实在是一个比较挑战的事情。

    不过结果还是好的,最终完成了一次完整的编译,在这里记录一下(参考网页在这里这里

     

    主要步骤如下

    1. 虚机:[可选]新建交叉编译平台
    2. 下载:源代码、编译器、固件文件和一些关联工具
    3. 编译:内核、模块
    4. 拷贝:将生成的各种文件替换原树莓派系统的文件

     

    1. 虚机

    树莓派上编译内核实在是太慢,所以重装了一个Ubuntu的虚拟机,虚拟机的安装可以参考这里

    同时为了后续拷贝文件的方便,需要安装SSH服务,可以参考这里

    -install ssh services

    sudo apt-get install openssh-server openssh-client

    sudo gedit /etc/ssh/sshd_config

    sudo /etc/init.d/ssh stop

    sudo /etc/init.d/ssh start

    sudo /etc/init.d/ssh restart

    -examples:

    ssh localhost

    ssh user@your-server-ip-address

    ssh vivek@userver.mydomain.com

     

    1. 下载

    在虚拟机中新建目录后,分别下载固件,源码,编译器(分别新建指定的文件夹)

    mkdir rasperberrypi

    cd raspberrypi

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

    git clone git://github.com/raspberrypi/linux.git RpiLinux

    git clone git://github.com/raspberrypi/tools.git RpiTools

     

    不过,如果在虚拟机中下载太慢也可以在主机中使用下载工具下载,例如使用以下地址下载3.6版本的内核

     

    对于虚拟机和树莓派中的文件操作,对于我来说,推荐使用Win SCP,点击这里下载

     

    如果网络环境需要代理,虚拟机中可以如下设置

    sudo nano /etc/apt/apt.conf

    Acquire::http::Proxy "http://web-proxy.corp.company.com:8080";

     

    1. 编译

    以下操作都在root用户下执行

     

    使用Win SCP递归的方式将源代码文件夹的运行属性添加上

     

    清空原先的配置信息

    make mrproper

    cd /home/andy/raspberrypi/RpiLinux/

     

    添加两个环境变量

    export KERNEL_SRC=/home/andy/raspberrypi/RpiLinux/

    export CCPREFIX=/home/andy/raspberrypi/RpiTools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-

     

    导出树莓派上的配置信息,并拷贝到内核源代码的根目录

    zcat /proc/config.gz > .config

     

    在此基础上设置一次树莓派的配置信息(如果不明白意义,直接回车保留默认值即可)

    apt-get install libncurses5-dev

    ARCH=arm CROSS_COMPILE=${CCPREFIX} make oldconfig

     

    对配置还可以进行微调

    ARCH=arm CROSS_COMPILE=${CCPREFIX} make menuconfig

     

    开始编译内核,如果CPU多核,可以添加-j参数(数字为内核数+1)

    ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j5

     

    如果需要详细的日志

    ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j5 &>log

    --undefined reference to 'sin'; add '-lm' to make file command line

     

    编译模块

    ARCH=arm CROSS_COMPILE=${CCPREFIX} make modules

     

    1. 拷贝

    生成内核文件,并拷贝到树莓派根目录的boot文件夹

    cd /home/andy/raspberrypi/RpiTools/mkimage

    ./imagetool-uncompressed.py /home/andy/raspberrypi/RpiLinux/arch/arm/boot/zImage

    copy .img to RPI's boot folder

     

    生成模块文件,并将这些文件覆盖掉树莓派的/boot/lib文件夹下的文件

    export MODULES_TEMP=~/modules

    ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} make modules_install

    copy and overwrite files from lib to RPI's /root/lib

     

    拷贝下载的固件包firmware/boot中文件,替换树莓派中boot文件夹下的文件

    bootcode.bin

    fixup.dat

    start.elf

    copy and overwrite files from firmware/boot to RPI's boot folder

     

    拷贝下载的固件包firmware/hardfp/opt/中VC文件夹,覆盖树莓派的boot/opt/VC文件夹

    VC

    copy and overwirte folder from firmware/hardfp/opt/ to RPI's boot opt folder

     

    结束

    重启树莓派,输入uname –a命令就可以看到编译后内核的版本(我的是越变越小,呵呵呵)

    原来的版本

    现在的版本

     

    Andy Yang

    2014-4-18

  • 相关阅读:
    第三天
    第二天
    第一天
    构建之法阅读笔记06
    返回一个一维整数数组中最大子数组的和2
    团队介绍
    软件工程结对作业02
    返回一个整数数组中最大子数组的和
    构建之法阅读笔记05
    暑假周总结二7.22
  • 原文地址:https://www.cnblogs.com/zygoses2gether/p/3673721.html
Copyright © 2011-2022 走看看