先来介绍一下n32和O32是啥,N32和O32就是MIPS系统上不同的ABI,即Application Binary Interface。MIPS体系结构最早只有o32的系统,但后来改进了寄存器的功能和分配方式,于是就又有了N32,相对于O32,N32的速度更快些。但二者目前在龙芯系统上还无法兼容。因为龙芯目前官方只支持O32,而N32有只有zhllg的overlay中有,所以使用gentoo来安装O32的工具链需要额外解决些问题,所以才有了这篇文章,之所以之前又写了N32的安装方法,是因为有zhllg大牛的技术支持,使得能直接安装N32的工具链。 Continue reading »
不管怎样,龙芯是咱们应该骄傲的,但是用它来编译东西确实很慢,我们很需要一个交叉编译器,能够在性能稍好的平台上为龙芯平台编译程序,x86是目前比较常见的平台,本博在实际工作中,需要在gentoo系统上安装支持龙芯n32的交叉编译器,下面分享一下本博的安装过程。
crossdev是gentoo系统下很方便的交叉编译环境安装和卸载工具,想进一步了解可以参考本博的这篇文章Gentoo中的交叉编译利器–crossdev,这里只讨论有了crossdev之后的安装过程。
首先,我们需要支持n32的gcc,glibc,linux-header,insight和binutils.其中,gcc,gdb,insight和linux-header都已经有了官方支持,我们还需要glibc的一些patch。头疼打patch这种繁重的劳动?别急,已经有国内的开源爱好者们做好了这些,我们仅仅需要几个附加步骤即可。 Continue reading »
sys-devel/crossdev
Available versions: 0.9.18-r10 ~0.9.19 **99999999
Installed versions: 0.9.18-r10(03:44:50 PM 11/29/2009)
Homepage: http://www.gentoo.org/
Description: Gentoo Cross-toolchain generator
交叉编译时很多嵌入式开发必须的工具,因为资料太少,遇到的问题又很难解决,所以交叉的开发环境一直让很多程序员头疼。我们就来了解一下gentoo下如何构建交叉编译环境。
先说说工具链,工具链是用来组建一个系统的工具包集合,因为它们使用输入和输出连接在一起,所以称为链。通常工具链包括以下几部分: Continue reading »
这是gcc maillist中某国际友人 laurent@guerby.net 做的2个小时报告的ppt,报告题目为GCC Toulibre 20091216。最近一直想深入了解gcc,而这个ppt基本包含本博想了解的内容,所以将其翻译并分享到这里。翻译过程中,很多地方可能有错,请大家不吝赐教。原版的ppt见文末。
- 什么是GCC
GCC–GNU Compiler Collection,即GNU 编译器集合。GCC即可作为本地编译器也能作为交叉编译器,它支持很多高级语言和多个编译和目标平台。GCC的网址 http://gcc.gnu.org.它是FSF基金会版权所有的自由软件. Continue reading »
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页
- 软件开发指南
使用内部选项来开关每个优化–测试正常后的优化选项默认打开.尽量按照模块化原理开发,相关的模块定义尽量本地化。#ifdef Is_True_On宏来标记来断言和确认的使用。通过断言,确认程序和DevWarns协助debug。虽然包含debug信息的编译器速度慢很多,但是可以尽早的发现错误。
- Debug辅助工具
四类:抽取某个阶段内和不同阶段间的程序代码(使用选项 -tr???);抽取某个阶段内或不同阶段间的符号表(使用选项 -ts???);分析/优化过程中方便跟踪的工具(使用选项 -tt???);提供能在调试器中调用的打印程序。
- 存储管理
使用存储池机制(commom/util/memory.c)代替malloc/free.提供任意数量的独立操作的存储池,有类似栈的操作,pop是释放内存的唯一方式。使用基于临时特性的存储池–永久的、PU级的、阶段级的和基本块级的。 Continue reading »
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页
代码生成
- 目标机信息表(targ_info)
该机制来自Cydrome,并进行了增强。将目标机指令集,ABI和调度信息参数化。通过表生成机制来编译和链接,生成的表是用于CG阶段的C++文件(?).这种机制能将优化算法和体系结构细节分开,而且再移植到新结构上时能最小化编译器的改动,因为机器相关的内容存放在机器相关的文件夹内。支持ISA子集。不同处理器的调度信息实现编译成独立的.so文件,并使用编译选项控制dlopen()使用哪个.so文件
- 代码生成中间表示(CGIR)
这种中间表示的每个操作(op)对应一条机器指令,通过targ_info来格式化指令。在一个目标机op中操作数和结果都存放在TN中(或者寄存器符号中).TN有符号、直接量和寄存器三种类型。TN的类型都是依据指令格式制定的。每个操作都使用两个操作数,并写出一个结果(和RISC相似),某些特殊的指令也能写两个结果(如 mul) Continue reading »
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://lingcc.com
若需要此讲义的原版,请email我
Fred Chow 原版讲义见最后一页
—————————————————
1.优化控制哲学
- 低优化级别–更短优化时间,更安全优化,更精确的计算,较缓慢的代码产生速度
- 高优化级别–较长优化时间,更激进优化,精确性让步于高性能,更快的代码生成
- 通过大量选项较好的控制优化–PathOpt2(?)提供了很多帮助
这是Fred chow 在德拉华大学所讲的open64课程讲稿的翻译。若需要原文ppt,请发邮件向我索取。
转载请注明出处: http://lingcc.com
Fred Chow 原版幻灯片见最后一页
1,历史:
1980-83 斯坦福大学RISC编译器研究
1987 MIPS Ucode编译器(R2000) -O2下的全局优化
1991 MIPS UCode编译器(R4000) -O3下的循环优化
另外:
1989 Cydrome Cydra5编译器 软流水优化
1994 SGI Ragnarok编译器(R8000) 浮点性能优化(Floating-pt performance?)
1997年SGI将上面两个分支连同斯坦福SUIF的工作,Rice的IPA整合在一起发布MIPSpro编译器(R10000)
2000年Pro64/Open64编译器(安腾)诞生
2,Open64大事记:
Continue reading »
原文是英文wiki里Dealing with masked packages那篇
http://gentoo-wiki.com/TIP_Dealing_with_masked_packages
感觉这篇很重要,在wiki里做为TIP类,自然表示可以带来很多方便,特别是后面那几个脚本
早就想翻译这篇了, 一直没动手,眼看下周就要开学了,要忙开学的事情。
所以今天赶紧把它译了出来 里面有一些专有词汇 如有问题请大家指正
—————————————————————————————————————–
相关连的那篇也翻译了: Package.keywords的小技巧
原文 http://gentoo-wiki.com/TIP_package.keywords
同步的中文wiki http://zh.gentoo-wiki.com/Package.ke…8A%80%E5%B7%A7
wiki里这两篇文章的相关联系已经更新
————————————————————————————————————————
其他更新
HOWTO 用Cedega运行极品飞车9 http://zh.gentoo-wiki.com/HOWTO_%E7%…3%9E%E8%BD%A69
原文: http://gentoo-wiki.com/HOWTO_RUN_Nee…ed_with_Cedega
——————————————————————————————————————————
处理被屏蔽(masked)的包
本文内容:
介绍
被关键字(keyword)屏蔽(masked)的包
被不明的关键字屏蔽
被严格屏蔽(Hard masked)的包
手动进行严格屏蔽
编辑/etc/portage/package.keywords文件的简便方法
开放一大群有联系的包
介绍
首先,被关键字(keyword)屏蔽(masked)的包都是测试中的或者不稳定的包:
注意: "(masked by: ~keyword)"
Masked By ~keyword Package Example
# emerge gnome-extra/gdesklets-core '''Calculating dependencies''' !!! all ebuilds that could satisfy "gnome-extra/gdesklets-core" have been masked. !!! possible candidates are: - gnome-extra/gdesklets-core-0.26 (masked by: ~keyword) - gnome-extra/gdesklets-core-0.26.1 (masked by: ~keyword) !!! Error calculating dependencies. Please correct.
其次,被严格屏蔽(Hard masked)的包:
注意: "(masked by: package.mask)"
Hard Masked Package Example
# emerge -pv filewatcher These are the packages that I would merge, in order: Calculating dependencies !!! All ebuilds that could satisfy "filewatcher" have been masked.!!! One of the following masked packages is required to complete your request:- app-admin/filewatcher-2.4.0 (masked by: package.mask)# Elfyn McBratney <beu@gentoo.org> (28 Apr 2005)# Masked for testing.
如果你仍然想安装这些包,那该怎么办呢……
被关键字(keyword)屏蔽(masked)的包
现在的新方法是:
echo "gnome-extra/gdesklets-core" >> /etc/portage/package.keywords
或者
echo "=gnome-extra/gdesklets-core-2.10.9" >> /etc/portage/package.keywords
如果你想开放一个特定的版本。
注意:你不需要在package.keywords里面指明电脑架构,除非你想使用其他架构中的软件,当然这是不推荐的。
如果emerge指示某个软件包被 "~* keyword"屏蔽, 你需要逐字的把他写下来,例如:
echo "~gnome-extra/gdesklets-core-2.10.9 ~*" >> /etc/portage/package.keywords
如果你在用crossdev为多种架构建立软件包,例如:
echo "~gnome-extra/gdesklets-core-2.10.9 ~*" >> /etc/portage/package.keywords/cross-i686-pc-linux-gnu
OSB: 在cross-i686-pc-linux-gnu中i686-pc-linux-gnu的名字要根据各架构做相应改变。
到此,在做了以上任一步骤后,需使用一下命令编译这个包:
emerge =gnome-extra/gdesklets-core-2.10.9
关于package.keywords这个文件的更多信息请点击这里http://zh.gentoo-wiki.com/Package.ke…8A%80%E5%B7%A7.
如果你在命令行模式下,app-portage/flagedit是自动向packages.keywords里面添加项目的工具。
使用实例:
flagedit gnome-extra/gdesklets-core -- +~x86
Kuroo是一个有用的KDE程序,可以让你浏览portage树并且对任何包进行指定安装。
它使你能安装具有任何依赖性的包,但是,这个程序目前由于不稳定而被屏蔽,比如 ~x86, 所以你不能安逸的在实际安装中使用它(即使它只是portage的前端)。
即使你不想把kuroo用于实际安装,但在开放依赖包时你还是需要它。
emerge -pv kuroo
它编辑标准的portage文件。
旧方法 (不提倡)
ACCEPT_KEYWORDS="~x86" emerge gnome-extra/gdesklets-core
这种方法已经不被提倡了,它出现在这里仅仅是因为历史原因,不要用这个方法。
请阅读http://forums.gentoo.org/viewtopic.p…060314#1060314 这是关于为什么ACCEPT_KEYWORDS不好的帖子。
简而言之,是因为emerge -u world会对用ACCEPT_KEYWORDS安装的包降级,这会造成潜在的致命改变并且使你的系统陷入瘫痪。
-U(功能:仅仅升级)这个参数也不被提倡了,这有一个充分的原因:如果包坏了,portage应该使它降级,-U确会对此操作造成阻碍。
被不明的关键字屏蔽
在你试图安装一个没有在你的架构上测试过的软件时,这个问题很常见。
向package.keywords文件中,在你要安装的那个包后面加"~*"以开放这个包。 例如:
echo "net-ftp/vsftpd -* ~*" >> /etc/portage/package.keywords
如果你有被9999屏蔽的CVS包,你可以做如下操作:
echo "media-gfx/retina **" >> /etc/portage/package.keywords
牢记,如果你在一个没有测试个架构里安装软件,这个软件也许没法运行。
被严格屏蔽(Hard masked)的包
开放被严格屏蔽(Hard masked)的包,需要把它们加到/etc/portage/package.unmask文件中。
所用命令和package.keywords稍有不同:
echo "=app-admin/filewatcher-2.4.0" >> /etc/portage/package.unmask
这将开放2.4.0版的app-admin/filewatcher。 如果你想开放这个包的所有版本,仅仅写它的名字就行了:
echo "app-admin/filewatcher" >> /etc/portage/package.unmask
当然也可以像 http://gentoo-wiki.com/TIP_package.keywords 里面那么操作。
注意:由于这些包的不稳定性,被严格屏蔽的包一般也被同样关键字被屏蔽。 你多半须要向package.unmask和package.keywords中都加人这个包。
手动进行严格屏蔽
很少的情况下,你需要避免这些包的安装。
这也许是个例子,如,某软件ebuild脚本里的一个bug造成那个包在你的系统上编译失败,这会使得像emerge –update –deep world这类命令无法顺利执行。
你可以跳过那个包的ebuild,这是通过把它的名字加到/etc/portage/package.mask来实现的:
echo "=sys-apps/file-4.17-r1" >> /etc/portage/package.mask
所用命令和上述package.unmask的一样。
编辑/etc/portage/package.keywords文件的简便方法
flagedit
# 安装: emerge flagedit
# 使用: flagedit <atom> — +<keyword>,例如 flagedit dev-util/libconf — +~x86
gimme
这个脚本使编译那些被关键字~arch屏蔽的包变得简单
/usr/bin/gimme
#!/bin/bash ############### gimme version 0.5.4 ################# Script to add package names to package.keywords. ## Originally by Tekmanx, re-written by Hackeron ## re-re-written by Gherald and edited by D. Watzke ##################################################### source /sbin/functions.sh [[$EUID != 0]] && { eerror "You are not root!" exit 1} [[-z "$1"]] && { eerror "Please specify a package name (eg. gimme <package-name>)" exit 1} [[-d /etc/portage]] || mkdir -p /etc/portage # Get fully-qualified ebuild nameFQN=$(ACCEPT_KEYWORDS="~x86" emerge -p $1 | grep "$1" | grep 'ebuild ' | tail -n2 | \head -n1 | sed -e 's/\[ebuild.......\]\ //' -e 's/\[[[:digit:]].*\]//' -e 's/-[[:digit:]].*$//') # We think there is either none or more than one package matching $1# so we let the user deal with it [[-z "$FQN"]] && emerge $@ -a; exit if grep -q "^ *[\>\<=]*$FQN *" /etc/portage/package.keywords; then ewarn "/etc/portage/package.keywords already contains \"$EXISTING\"" emerge $@ -a; exitelse einfo "Adding $FQN to package.keywords and emerging in 5 seconds."; sleep 5 echo $FQN >> /etc/portage/package.keywords emerge $@ -afi
把这个文件命名为"gimme"并保存到/usr/bin/然后执行:
chmod 755 /usr/bin/gimme
现在你就可以使用这个脚本了,例如:
gimme gdesklets-core
/etc/portage/package.unmask的脚本
这个脚本使开放那些被严格屏蔽的包变得简单。
/usr/local/bin/unmask
#!/bin/bash## This script will unmask any package masked by the actual profile.## First we search for what is actually masked # in /usr/portage/profiles/package.mask then add a corresponding # line in /etc/portage/package.unmask### Original by drax@sweon.net source /sbin/functions.sh [ "$UID" -ne "0" ] && eerror "You must be root to run this script." && exit[ -z "$1" ] && eerror "Please state a package name (eg. unmask kde-base/kode)" && exit[ ! -d /etc/portage ] && einfo "Creating /etc/portage directory" && mkdir /etc/portage if [ "$(grep "$1"-[0-9] /etc/portage/package.unmask 2>/dev/null)" ]; then ewarn "$1 already exists in package.unmask"else PKG_LINE="$(grep "$1"-[0-9] /usr/portage/profiles/package.mask 2>/dev/null)" if [ ! $PKG_LINE ]; then PKG_LINE="$(grep "$1" /usr/portage/profiles/package.mask 2>/dev/null)" fi if [ ! $PKG_LINE ]; then ewarn "Could not find $1 in /usr/portage/profiles/package.mask" && exit 1 else ebegin "Adding $1 to package.unmask" echo $PKG_LINE >> /etc/portage/package.unmask eend $? fifi
同样,把这个文件命名为"unmask"并保存到/usr/local/bin然后执行:
chmod 755 /usr/local/bin/unmask
现在你就可以使用这个脚本了,例如:
unmask kde-base/kode # this version of unmask requires the full package name, including app-category/
也可以配合gimme一起使用,例如:
unmask kde-base/kode && gimme kode
潇洒去吧 
开放一大群有联系的包
从Portage 2.1起,很多/etc/portage/package.*的文件能够被目录代替。这些目录里的文件可以自动被Portage连结在一起。
这个对于X模块(xorg)来说特别有用,几乎300个的和这个模块有联系的包都需要被开放。因而,你可以复制 http://www.gentoo.org/proj/en/deskto…x-packages.txt
到/etc/portage/package.keywords/xorg (也许同样需要复制到 /etc/portage/package.unmask/xorg)。如果不这样的话/etc/portage/package.keywords里会 有一大窜东西,而使得这个文件不好管理。
脚本:开放所有被依赖的包
/bin/gimme-everything
#!/bin/bash## This script will unmask any package masked by specified keyword## It is using flagedit to remove keyword# Usage: /bin/gimme-everything "=gnome-2.14.2" "+~amd64"# Sorry that this is in one command line, but it was composed in one ;)## author: mmazurek[at]wallix.com while true; do if emerge "$1" | grep '!!! All ebuilds'; then emerge "$1" | grep '!!! All ebuilds' | while read line; do n=$(echo $line | sed -e "s/.*\"\(.*\)\".*/\\1/"); flagedit "$n" -- "$2"; done; else break; fi;done
脚本:开放所有被依赖的包 2
这个脚本不需要flagedit.
/sbin/unmask
#!/usr/bin/perl -wuse strict; sub emerge{ my $package = shift; $_ = `emerge -pv "${package}" 2>&1`; if(m/^- (\S+) \(masked by:.*package.mask/mi) { print "Unmasking ${1} in package.unmask\n"; print UNMASK "=${1}\n"; return 1; } if(m/^- (\S+) \(masked by:.*keyword/mi) { print "Unmasking ${1} in package.keywords\n"; print KEYWORDS "=${1}\n"; return 1; } if(m/^!!! masked or don't exist:\n(\S+)/mi) { while(emerge($1) != 0){} return 1; } return 0;} open(UNMASK, ">>/etc/portage/package.unmask");open(KEYWORDS, ">>/etc/portage/package.keywords");our $package = $ARGV[0];$package =~ s/"/\\"/g;while(emerge($package) != 0){}print "Done\n";close(UNMASK);close(KEYWORDS);
使用:
unmask ">media-video/mplayer-1.0_rc1"
桌面环境 gnome ,因为自己还是新手,求稳和相对的易用性,没用太刺激的~x86,只是在几个包上使用了keywords,比如fcitx。希望能帮助需要的人。
另外,新装的gentoo系统忌上来就用一堆的use,
$cat /etc/make.conf
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /etc/make.conf.example for a more detailed example.
CFLAGS=”-O2 -march=athlon-xp -pipe -fomit-frame-pointer ”
CXXFLAGS=”${CFLAGS}”
# This should not be changed unless you know exactly what you are doing. You
# should probably be using a different stage, instead.
CHOST=”i686-pc-linux-gnu”
CCACHE_SIZE=”1G”
ACCEPT_KEYWORDS=”x86″
#############################################################3
MAKEOPTS=”-j2″
#############################################################
GENTOO_MIRRORS=”ftp://gentoo.anheng.com.cn/gentoo http://mirror.averse.net/pub/gentoo/”
SYNC=”rsync://mirror.averse.net/gentoo-portage”
############################################
INPUT_DEVICES=”keyboard mouse”
VIDEO_CARDS=”fglrx”
#VIDEO_CARDS=”radeon”
LINGUAS=”zh_CN”
USE=”nptl nptlonly -ipv6 -fortran unicode svg hal dbus -kde -qt3 -qt4 -arts -eds -esd gnome gstreamer -dlloader gtk firefox X avahi alsa png 3dnow ssl threads jpeg truetype wma mp3 opengl mpeg pdf gif mad -selinux en zh_CN gdm cups bash-completion ldap samba xinetd tetex”
source /usr/portage/local/layman/make.conf
下面说说自己认为设置gentoo use 注意事项吧
1,忌一下狂添加use。在安装新系统时,只要按照说明添加就行。遇到要添加的软件可以先使用“gentoo 软件名”搜索一下看,有没有wiki或者是别人的建议什么的。这样可以避免系统臃肿和block等错误(我承认我有系统洁癖)
2.。快速安装gentoo的网址 http://www.gentoo.org/doc/zh_cn/gentoo-x86-quickinstall.xml 我就是按照这个说明安装的,简单易行,想要先安装再学习gentoo的朋友可以试试,免去看gentoo手册的痛苦
比较全的gentoo use 说明(英文)http://www.gentoo.org/dyn/use-index.xml
可以参照这里的描述来设置use。
3.gentoo常用操作 zh.gentoo-wiki.com/Gentoo_Quick_Guide
介绍一些gentoo常用的命令
有了以上的三步 你就能先使用gentoo 享受gentoo了 。

近期评论