系统软件工程师实战攻略(体系结构篇)--(1)
作者 陈怀临 | 2011-12-10 12:16 | 类型 专题分析 | 31条用户评论 »
前言
这个世界上,需要玩虚的;也需要玩实的;
活命需要玩实的。但不一定活的好;不一定活的开心;但可以活下去。
最高境界是玩虚的;但前提是银行帐号里银子要是实在的。。。
《系统软件工程师实战攻略(体系结构篇)》 的目的为嵌入式系统工程师,网络工程师,提供一些体系结构实战案例。目的是活命。所有的代码都是实践调试过的,具有产品级别的质量。版权是BSD License。换言之,随便重用。
这些东东对大辽,大宋的工程师们,烟酒生们都适用。
以后再整《系统软件工程师实战攻略(操作系统篇)》和《系统软件工程师实战攻略(网络篇)》
然后就封笔了。
希望有所帮助,
陈怀临,2011 12 8 ,加州
如何做一个交叉编译器(cross compiler)和工具链
要玩嵌入式,玩CPU和板子,首先要学会定制一个交叉编译器。交叉编译器是啥意思呢? 其实就是在你的研发的机器上(例如一个x86机器),做研发,写代码。然后用这个编译器去产生相应的代码(例如,MIPS,Arm,或者PowerPC,或者龙芯。。。。。。)
GCC和ToolChain包括gcc,gdb,tools三大块。源码都可以从GNU去下载。然后自己修改和定做。
相关的下载地址为:
GCC: http://gcc.gnu.org/releases.html
GDB: http://www.gnu.org/s/gdb/download/
binutil:http://www.gnu.org/software/binutils/
libc: http://sourceware.org/newlib/
下面是一个完整的script可以用来做MIPS,PowerPC,ARM和任何其他目标CPU的cross compiler。我做的这些东东是2004年做和整理的。可以看见各种版本与目前最新的偏低了。
/*
* Copyright (c) 2011, Huailin Chen
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* the Huailin Chen and its contributors.
* 4. Neither the name of the Huailin Chen nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* Creation Date: 1/14/2004
* Author: Huailin Chen huailin@gmail.com
*
* $Id: build_script,v 1.1 2004/05/07 17:41:48 huailin Exp $
*/
########################################
PWD =
CPU =
########################################
#把下载的各个package展开后放在一个gnu_download目录里
#4个子目录,分别存放gcc,gdb,libc和binutil的原文件
BINUTILS_DIR =./gnu_download/binutils-2.9.1
GCC_DIR =./gnu_download/gcc-2.95.1
LIBC_DIR =./gnu_download/newlib-1.8.2
GDB_DIR =./gnu_download/gdb-5.0
###################################
TARGET_ARM =arm-elf
TARGET_MIPS_ELF=mips-elf
TARGET_PPC_EABI_ELF=powerpc-eabi
TARGET_SH_ELF =arm-elf
#TARGET_AMD
#TARGET_ALPHA
#TARGET_IA32
###################################
#PREFIX目录是最后的结果存放目录。要事先建好
#
PREFIX=$(PWD)/../arch/$(CPU)/tool-chain
TARGET = $(TARGET_ARM)
####################################
mkdir build-binutils build-gcc build-newlib build-gdb
cd build-binutils
$(BINUTILS_DIR)/configure –target=$(TARGET) –prefix=$(PREFIX) -v
make all install
pwd
# Configure, build and install gcc
cd build-gcc
$(GCC_DIR)/configure –target=$(TARGET) –prefix=$(PREFIX) –with-newlib –with-headers=$(PWD)/gnu_download/$(LIBC)/newlib/libc/include –with-gnu-as –with-gnu-ld –enable-languages=”c”
-v
make all install
#Configure, build and install libc
pwd
cd ../build-newlib
$(LIBC_DIR)/configure –target=$(TARGET) –prefix=$(PREFIX) -v
make all install
#Configure, build and install gdb
pwd
cd ../build-gdb
$(GDB_DIR)/configure –target=$(TARGET) –prefix=$(PREFIX) -v
make all install
#Clear history directory/files
pwd
cd ..
rm -rf build-*
| |
雁过留声
“系统软件工程师实战攻略(体系结构篇)--(1)”有31个回复
这篇文章要不是首席写的,又得有人上来拍砖了
首席封笔啊,别吓我!
>gcc-2.95.1
故纸堆里面翻出来的脚本
James,可见我是老鸟呀。。。我第一次做cross compiler是2000年。这些东西是我2004年写和整理的。现在拿出来。。。
01年做OS时在cygwin环境下搞过一次,当是还是GCC的3.X时代,做CROSS-COMPILE特费劲,而在CYGWIN的环境下搞更不容易。
配合BOCHS虚拟机做OS或者找个MIPS/ARM的仿真器软件,再搭一个调试环境(当时在02年的时候有个不太完善的MIPS虚拟机,现在不知道发展的咋样了)对学生来说是非常不错的学习手段,硬件可以暂时不急着搞。
另外,如果有WINDOWS CE PLATFORM BUILDER这个软件的话(在CE4.0左右的时候OEM厂商可以拿到),这些东西都有了,就是说你可以用微软的这个工具做自己的OS,并且像使用VC6一样方便…
一个类似的但功能更强大一点的脚本。直接运行,自动下载源码并编译,下载过程还支持断点续传。
https://github.com/esden/summon-arm-toolchain
请问各位 不太懂电路 可以进入嵌入式吗?一直犹豫中
这个要顶阿
抓你一个笔误: binutil -> binutils
另外现在不需要自己整cross compiler了,down一个openwrt的包,全包含。
如果只做到能编kenerl的Cross C compiler就更容易了。
还有Gentoo有现成的玩法,可以很容易的cross compile出一个相对完整的系统出来。
标题让人看起来眼前一亮,但走进来一看,好像没有看到让人眼前一亮的东西。。。。唉,首席现在不玩实的了。。。
嗯。。。首席这个脚本做multilib cross会比较吃力。。
系统软件工程师实战攻略 — 把软件二字去掉,更给力;再进一步,把系统也去调吧
首席这个脚本现在用怕是够呛,新版的gcc编译需要一些数学计算库,要自己手动配置下。其实现在用crosstool-ng这类工具来构建交叉编译器挺方便的,没必要自己写脚本了。
呵呵,期待首席的下文。
我正在下载最新的gcc,gdb,binutil 和libc。从新做一遍。我对这个系列文章的要求是:每个代码都是在我的机器上运行过的。
感觉首席对国内的人太低估了。
这个国内能做的人如过江之鲫,当然论功力(很多可能是知其然不知其所以然)比硅谷肯定有差距。
但是,我要提醒一下,华为的人并不代表国内的最高水平(我不是黑华为,只是觉得首席老是把华为当作国内的标杆,这个是使绝对错误的)。
那你以为国内谁是标杆呢?呵呵。
话说当年一直用首席做的toolchain,直到换存储的时候把首席的目录搞丢了,正好当时也要升级GDB,于是就重新做了一遍。。。
只讲技术的话,千万别忽视小公司的人,很多技术都是在千奇百怪的问题和各种不合理的需求中磨练出来的.
应聘的大把简历都会嵌入式linux交叉编译开发
16楼,通读了一遍没读出来这篇文章有对国内人的低估啊?虽然是比较基础的东西。
另外,怎么又扯华为那去了,跟这篇文章有关系吗?
不知道是不是我没读仔细
heeeee. 我的文章是写给学生或者刚出校门的。国内的国外的,其实都一样。 类似写《普通物理》,不是写给你们这些大牛看的:-)
首席的强项在于:OS,处理器,芯片设计,编译器,网络等等.
要是同时成为 高性能计算领域,存储领域,数据挖掘领域,搜索领域等专家. 那就好了, 弯曲上就能多些别的文章了.
这个嵌入式开发还是蛮多的,不过首席可是软硬通吃那种
to楼上民工 于 2011-12-12 12:24 上午
那你以为国内谁是标杆呢?呵呵。
—————————–
美国哪家公司是标杆?
大家会说美国没有谁称的上标杆。
中国呢?当然也没有。
沙加 于 2011-12-12 7:47 上午
16楼,通读了一遍没读出来这篇文章有对国内人的低估啊?虽然是比较基础的东西。
另外,怎么又扯华为那去了,跟这篇文章有关系吗?
不知道是不是我没读仔细
—————————
我的意思是说首席和华为的人接触比较多,
写这篇文章很有可能是觉得国内的人这方面比较弱,当然首席自己出来说了是给刚入行的人看得,那是我弄错了。
再补充几句,我接触过好几个硅谷来的搞技术的华人,在和国内国内的人合作过一段时间后都被震撼了。不是国内的人太强,而是他们太低估国内的水平了。
同意。现在大宋和大辽的技术差距应该在缩小。也可能像王大师所说的大辽最近10年操作系统和处理器等没有什么新的创新。而大宋跟上的系统工程师的基数越来越多,在这个大的基数上再涌现出一些高水平的系统工程师也是很平常的。或许眼界没有大辽的技术牛人广,但是论系统软件的功力估计应该也相差不远了。
@大宋民工
能否介绍一个学习技术的好去处?
4zs 于 2011-12-13 8:29 下午
@大宋民工
能否介绍一个学习技术的好去处?
——–
什么去处?
你是说哪家公司?
都行,能学到东西就可以了
4zs 于 2011-12-14 3:27 上午
都行,能学到东西就可以了
—————————-
这个的话
1 我只对上海的公司有一些了解,其他地方的不清楚
2 如果是没有相关经验的人首推当然是华为,中兴,其次,思科,marvell(如果你进的去),但绝对不要去broadcom,爱立信。
3 如果有些经验相获得提升的话,首推中兴,然后博达(虽然工资又低,老板又黑),光桥的老板开的那家(名字我不记得了,而且也比较黑),外企的话也就诺西,阿朗,思科,台企智邦也可以(工资也低)。
4 建议你看看it企业速查那里的评论比我说的要翔实的多(虽然有部分下三滥公司的马甲在那里自吹自擂)。