建立树莓派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查看当前内核.
建立树莓派raspberry交叉编译环境以及编译内核的更多相关文章
- Ubuntu 树莓派2b交叉编译环境
在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征:有时是因为目的平台 ...
- ubuntu16.04(64位)建立交叉编译环境,并配置编译内核
安装步骤 1.准备工具安装目录 将压缩包gcc-linaro-arm-linux-bnueabihf-4.9-2014.07_linux.tar存放在一个目录下,这个目录就是你等会解压缩的目录,以后这 ...
- 建立ARM交叉编译环境 (arm-none-linux-gnueabi-gcc with EABI)【转】
转自:http://lib.csdn.net/article/embeddeddevelopment/60172?knId=886 建立ARM交叉编译环境 (arm-none-linux-gnueab ...
- Ubuntu12.04下arm交叉编译环境的建立
http://blog.csdn.net/heyangya2009/article/details/5424376 备注:ubuntu12.04+Android+Real6410 在主机上用来编译其他 ...
- Linux主机上实现树莓派的交叉编译及文件传输,远程登陆
0.环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspb ...
- NeuSoft(1)构建嵌入式交叉编译环境
操作系统版本:ubuntu 12.04 内核名称:Linux 内核发行版:3.2.0-generic 内核版本:#50-Ubuntu SMP Mon Sep 12 21:18:14 UTC 2011 ...
- Android独立交叉编译环境搭建
我们经常需将一些C/C++源码编译成本地二进制,直接在android的linux内核上运行,这是就需要进行交叉编译.由于Android的运行环境核普通Linux又区别,所以常规方式针对ARM进行交叉编 ...
- YA157C交叉编译环境搭建
目录 1.开发板简介 3.主机搭建交叉编译环境 4.编译第一个ARM Linux程序--Hello World 5.在开发板上运行Hello World程序 6.ssh登录开发板 7.注意 8.she ...
- 【基于mini2440开发板的交叉编译环境及内核树配置.
在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙...笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大多 ...
随机推荐
- Linux查看用户和组命令
在Linux系统里,我们会经常用Linux查看用户的命令,在这里我们一些命令进行了总结,总共有7个,并做了详细的解释,以便让大家更深入的理解,接下来让我们一起来看看这些命令和具体应用. 一.Linux ...
- Matlab心得及学习方法(不断更新)
Matlab心得及学习方法(不断更新) Matlab心得及学习方法(不断更新)P.S. 那些网上转载我的文章不写明出处的傻眼了吧?!老子更新了! 发现现在很多人(找工作的或者读博的)都想要学习或者正在 ...
- csuoj 1355: 地雷清除计划
这是一个非常神奇的题: 感觉像一个模拟搜索: 但是竟然可以用网络流来解决: 直接粘题解把: 如果不能走通的话,必然说明能够从右上角(图外面)沿雷“跳” ,一直可以“跳”左下角(图外面) ,因此建好图之 ...
- Java 编程:如何提高性能?(简单总结篇)
开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢? 本文转自国内 ITOM 行业领军企业 OneAPM Cloud Insight(一款能够优雅监控多种操作系 ...
- javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- J2EE的十三种技术(规范)
J2EE的十三种技术(规范) Java数据库连接(JDBC) JDBC API以一个统一的方式访问各种数据库.与ODBC类似,JDBC将开发者和私有数据库之间的问题隔离开来.由于它建立在Java上, ...
- [转贴]使用CryptoAPI解析X509证书和P12证书
原文在 http://bbs.pediy.com/archive/index.php?t-97663.html,但是觉得这篇文章非常好,我抄下来作我笔记用 一.解析X509证书 1.从磁盘上的证书文件 ...
- vijosP1567子串计数
描述现在有一个字符串,请求出这个字符串不相同的子串个数.YXY现在不会做,请你来帮忙…… n<=20W 题解: 后缀数组裸题,其实我在练习模板写对了没 代码: #include<cstdi ...
- Windows下的.NET+ Memcached安装
转载请标明出处: http://www.yaosansi.com/ 原文:http://www.yaosansi.com/post/1396.html Memcached官方:http://danga ...
- wpa_supplicant使用笔记
还在搞8634,看不到头了..唉.wireless_tools的缺点是不支持WPA认证,所以有必要把wpa_supplicant也移植过来.无线 网卡是基于zydas芯片的,正好可以在网上搜到wpa_ ...