crosstool官网上下载解压crosstool后,对demo-*.sh, gcc-*glibc-*.dat脚本进行配置,配置方法参照《嵌入式Linux系统移植-使用crosstool创建自己的交叉编译器》

配置好crosstool后,运行demo-*.sh脚本有可能得到如下错误:

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ ./demo-arm9tdmi.sh

……………….
……………….
applying patch /home/rookiesean/workspace/crosstool-0.43/patches/glibc-2.3.6/arm-ctl_bus_isa.patch
getandpatch.sh: 1: patch: not found
patch /home/rookiesean/workspace/crosstool-0.43/patches/glibc-2.3.6/arm-ctl_bus_isa.patch failed

安装patch以解决这一问题

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ sudo apt-get install patch

…………………………
…………………………
/home/rookiesean/workspace/crosstool-0.43/crosstool.sh: 110: bison: not found
crosstool: You don’t have bison installed

安装bison以解决这一问题。

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ sudo apt-get install bison

…………………………
…………………………
/home/rookiesean/workspace/crosstool-0.43/crosstool.sh: 111: flex: not found
crosstool: You don’t have flex installed

安装flex以解决这个问题

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ sudo apt-get install flex

………………………..
………………………..
configure: error:
*** These critical programs are missing or too old: as ld
*** Check the INSTALL file for required versions.

这里重点讲一下以上的错误。出现这种情况是因为Ubuntu默认所安装的binutils版本为binutils-2.20, 当binutils太新的时候,crosstool只好将它当成太老的版本,报告说too old; as ld. 于是我们需要重新编译安装一个老版本的binutils, 2.19或者2.18都可以被crosstool所识别,这里拿binutils-2.18举例。但还有一个问题,Ubuntu10.04默认安装的gcc版本是gcc-4.4.3,跟binutils-2.20一样,太高版本的gcc对语法要求更为严格,这样会导致binutils-2.18无法轻松的编译通过,于是我们需要编译安装一个老版本的gcc, 4.1的版本可以编译成功binutils-2.18。在Ubuntu10.04可以通过

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ sudo apt-get install gcc-4.1

安装gcc-4.1。安装完成后运行如下命令:

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ cd /usr/bin
rookiesean@rookiesan-laptop:/usr/bin$ sudo rm gcc
rookiesean@rookiesan-laptop:/usr/bin$ sudo ln -sf gcc-4.1 gcc
rookiesean@rookiesan-laptop:/usr/bin$ gcc -v

得到如下显示:

Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v –enable-languages=c,c++ –prefix=/usr –enable-shared –with-system-zlib –libexecdir=/usr/lib –without-included-gettext –enable-threads=posix –enable-nls –with-gxx-include-dir=/usr/include/c++/4.1.3 –program-suffix=-4.1 –enable-__cxa_atexit –enable-clocale=gnu –enable-libstdcxx-debug –with-tune=generic –enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.3 20080704 (prerelease) (Ubuntu 4.1.2-27ubuntu1)

表明原先指向gcc-4.4的的符号链接已经被重新指向新安装的gcc-4.1,系统中默认的gcc版本为4.1。

下载binutils-2.18, 将其解压缩后,进入binutils顶层目录,运行

rookiesean@rookiesan-laptop:~/workspace/binutils-2.18$ ./configure –prefix=/home/rookiesean/temp/binutils –disable-nls
rookiesean@rookiesan-laptop:~/workspace/binutils-2.18$ make all
rookiesean@rookiesan-laptop:~/workspace/binutils-2.18$ make install

其中–prefix=/home/rookiesean/temp/binutils表示生成可执行文件的存放位置,可自定义。

编译成功后在/home/rookiesean/temp/binutils/bin/中就生成了ld as程序的可执行文件, 到/usr/bin目录下面将系统默认的ld和as替换成2.18版本的:

rookiesean@rookiesan-laptop:~/workspace/binutils-2.18$ cd /usr/bin
rookiesean@rookiesan-laptop:/usr/bin$ sudo rm as ld
rookiesean@rookiesan-laptop:/usr/bin$ sudo ln -sf /home/rookiesean/temp/binutils/bin/ld ld
rookiesean@rookiesan-laptop:/usr/bin$ sudo ln -sf /home/rookiesean/temp/binutils/bin/as as
rookiesean@rookiesan-laptop:/usr/bin$ ld -v; as -v

得到如下显示:

GNU ld (GNU Binutils) 2.18
GNU assembler version 2.18 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.18

表示系统默认的binutils版本已经变换为2.18版本。

接下来,就可以运行demo-*.sh建立属于自己的交叉编译器了。

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ ./demo-arm9tdmi.sh

等一下,还有一个错误。。。-_-!

In file included from version.c:33:
/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/csu/version-info.h:2: error: missing terminating ” character
/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/csu/version-info.h:3: error: missing terminating ” character
version.c:40: error: syntax error before string constant
make[2]: *** [/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/csu/version.o] 错误 1
make[2]:正在离开目录 `/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/glibc-2.3.6/csu’
make[1]: *** [csu/subdir_lib] 错误 2
make[1]:正在离开目录 `/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/glibc-2.3.6′
make: *** [lib] 错误 2

老版本的glibc在/bin/sh为dash的时候会出现这个问题,一种解决方法是把/bin/sh重定向为bash,在创建完交叉编译器后可以将/bin/sh重新改回dash,运行如下面命令修改/bin/sh:

rookiesean@rookiesan-laptop:~/workspace/crosstool-0.43$ cd /bin
rookiesean@rookiesan-laptop:/bin$ sudo mv /bin/sh sh.old
rookiesean@rookiesan-laptop:/bin$ sudo ln -sf bash /bin/sh
rookiesean@rookiesan-laptop:/bin$ sh –version

得到如下显示:

GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

搞定,继续编译crosstool并使用自己的交叉编译器吧。

参考资料:
ubuntu10.04下建立交叉编译工具链支持软浮点
How to cross-compile?

在GRUB2里改变默认的内核启动顺序
ubuntu9.10之前的发行版采用的是menu.list来配置系统的默认启动内核,而在ubunt9.10以后,使用的是Grub2,配置方法跟menu.list发生了变化。Grub2的配置与两个文件有关,一个是/boot/grub/grub.cfg, 这是grub运行时所使用的配置文件,不能被人为编辑,而只能通过相应的script如”update-grub”来修改。另一个文件是/etc/default/grub, 这个文件可以使用Linux提供的任意文本编译器修改,再通过相应script更新到/boot/grub/grub.cfg. 所以我们接下来的操作是对/etc/default/grub的操作,但首先需要打开/boot/grub/grub.cfg记下想要设为默认启动内核的内核的menu entry position 或者是 menu entry description string 。

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
set default=”Microsoft Windows XP Professional (on /dev/sda1)” //当前默认的启动内核
if [ ${prev_saved_entry} ]; then
set saved_entry=${prev_saved_entry}
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z ${boot_once} ]; then
saved_entry=${chosen}
save_env saved_entry
fi
}

function recordfail {
set recordfail=1
if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
}
insmod ext2
set root=’(hd0,8)’
search –no-floppy –fs-uuid –set 61d65174-d17d-44a9-a88a-9a8346754243
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640×480
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don’t
# understand terminal_output
terminal gfxterm
fi
fi
insmod ext2
set root=’(hd0,8)’
search –no-floppy –fs-uuid –set 61d65174-d17d-44a9-a88a-9a8346754243
set locale_dir=($root)/boot/grub/locale
set lang=zh
insmod gettext
if [ ${recordfail} = 1 ]; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ### // 从这里开始是当前机器中所有的可以加载的内核
/*第一个可加载的内核,menu entry position为0,以下递加, menu entry description string为包括引号的’Ubuntu,Linux 2.6.32-23-generic’*/

menuentry ‘Ubuntu,Linux 2.6.32-23-generic’ –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
insmod ext2
set root=’(hd0,8)’
search –no-floppy –fs-uuid –set 61d65174-d17d-44a9-a88a-9a8346754243
linux    /boot/vmlinuz-2.6.32-23-generic root=UUID=61d65174-d17d-44a9-a88a-9a8346754243 ro   quiet splash
initrd    /boot/initrd.img-2.6.32-23-generic
}
menuentry ‘Ubuntu,Linux 2.6.32-23-generic (恢复模式)’ –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
insmod ext2
set root=’(hd0,8)’
search –no-floppy –fs-uuid –set 61d65174-d17d-44a9-a88a-9a8346754243

接下来打开/etc/default/grub文件

# If you change this file, run ‘update-grub’ afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=”Microsoft Windows XP Professional (on /dev/sda1)”
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
GRUB_CMDLINE_LINUX=”"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo’
#GRUB_GFXMODE=640×480

比如说你想把默认内核设置为可加载的第一个内核,既/boot/grub/grub.cfg里的’Ubuntu,Linux 2.6.32-23-generic’, 就可以将上面的GRUB_DEFAULT设成

GRUB_DEFAULT=’Ubuntu,Linux 2.6.32-23-generic’或者GRUB_DEFAULT=0

想要设成其他的内核也是一样的操作。

完成后将/etc/default/grub保存,然后在terminal中运行

update-grub

重启机子,就可以发现默认的启动内核已经改成你所想要的内核了。

当然,对于grub2的操作还可以有其他方法,可以不用修改/etc/default/grub文件,直接通过调用命令 grub-set_default去修改,想要了解更多点击这儿

Ubuntu与XP双系统下卸载Ubuntu

由于我的破电脑总共只有40G硬盘,装了Ubuntu以后,Windows只有20G感觉不够用。而整个Ubuntu安装完成后实际上只用了2G的空间,原先为Ubuntu分区分了20G浪费了,所以在安装Ubuntu一个星期之后,我打起了先卸载Ubuntu,再重分区,再重新安装Ubuntu的主意(实际上只要重新安装Ubuntu,就可以在安装过程中重新分区了,天知道我那时候是怎么想的)。要卸载Ubuntu的话,实际上就只需要两步,首先是要更改MBR区,使得引导扇区不再使用Ubuntu的Grub程序,还是使用Windows的引导程序,这一步可以通过在Windows安装光盘中运行恢复控制台,敲入命令:

fixboot
fixmbr

既可,然后重启电脑就会直接进入Windows引导程序启动Windows XP。另一步就是要删除Ubuntu分区,这一步可以在Windows中使用Windows自带的磁盘管理工具删除分区,重新格式化分区。这里我的操作出现了一些错误,在我将原先旧的Ubuntu分区删除,重新分区时,磁盘管理工具提示我出现错误,无法为我创建分区,但似乎别人都没遇到这个问题,后来我还是通过Ubuntu的安装光盘将电脑上的未分区磁盘空间重新分区了一个FAT32给Windows,一个SWAP做为Ubuntu的交换区, 一个EXT4挂载到Ubuntu的根目录,搞定。

2010年4月30号(北京时间),Ubuntu 10.4LTS发布,抱着抢鲜的态度,第一时间到官网上下了desktop版的Ubuntu10.4,刻录烧盘。第二天从京东order了个500G的硬盘,把自己的小破本移出20G的空间,然后开始硬盘安装ubuntu10.4。安装的过程很快,加上安装前的配置大概半个小时左右,比起Windows动辄两个小时的安装时间要快很多。安装过程很简单,基本上的配置都是很浅显易懂的,只不过在分区的时候,如果说是需要在以后的Ubuntu使用过程中用到休眠功能,一般要为系统分配1.6倍于内存大小的SWAP空间,其他的空间可以全部用来格式化为EXT4格式,挂载于“/”目录。另外在安装过程的最后,安装程序会去从网络上下载语言包,这一步完全可以先跳过,因为官方的更新源相对于国内的访问速度还是比较慢的,可以在安装完成后重新选择国内的更新源去下载语言包。

安装完毕后,重启进入ubuntu系统,开机速度虽说没达到官方宣传的10秒开机(当然,人家那是属于牛机,我的小破本就。。。),但是还是相当快的。具体的配置过程可以参照Ubuntu wiki上的速配指南, 以下是我所遇到的问题,会在今后的日子里视情况而添加:

Flash上中文显示为方块

在Ubuntu10.4上安装好firefoxflash插件后,打开如豆瓣电台QQ空间的应用,会发现上面的中文字体显示为方块,原先在Ubuntu9.10上也遇到过相同的问题。通过google, 发现很多的解决方法,都试了下,发现还是下面的方法最好:

sudo gedit /etc/fonts/conf.d/49-sansserif.conf
将倒数第四行 sans-serif 修改为“文泉驿正黑”

<?xml version=”1.0″?>
<!DOCTYPE fontconfig SYSTEM “fonts.dtd”>
<fontconfig>
<!–
If the font still has no generic name, add sans-serif
–>
<match target=”pattern”>
<test qual=”all” name=”family” compare=”not_eq”>
<string>sans serif</string>
</test>
<test qual=”all” name=”family” compare=”not_eq”>
<string>serif</string>
</test>
<test qual=”all” name=”family” compare=”not_eq”>
<string>monospace</string>
</test>
<edit name=”family” mode=”append_last”>
<string>WenQuanYi Zen Hei</string>
</edit>
</match>
</fontconfig>

第二种方法:
a: cd /etc/fonts/conf.d
b: sudo gedit 69-language-selector-zh-cn.conf
c: 找到

<string>sans-serif</string>
</test>
<edit name=”family” mode=”prepend” binding=”strong”>
<string>WenQuanYi Zen Hei</string>
<string>Bitstream Vera Sans</string>
<string>DejaVu Sans</string>
<string>AR PL UMing CN</string>
<string>AR PL ShanHeiSun Uni</string>
<string>WenQuanYi Bitmap Song</string>
<string>AR PL UKai CN</string>
<string>AR PL ZenKai Uni</string>

将其中的<string>WenQuanYi Zen Hei</string>弄到第一行。
d: 重新启动firefox,不但flash乱码解决掉,而且firefox的页面显示也变得简介美观了。

还有种方法:
同样是上面的文件,删除。。。这个真的不推荐

Adobe Air平台上有很多很酷的应用,比如Seesmic Desktop(原twhirl)TweetDeck for twitter, Times Reader for reading NewYork Times等等。它是一个与操作系统无关的平台,可以被安装在Windows, MacLinux上面。

基于Adobe Air平台的应用程序安装非常简单,唯一需要做的是首先先在自己的电脑上安装好最新版本的Adobe Air。

不用担心所装的Adobe Air是否为最新版本,任何基于Adobe Air的应用在安装过程中都会自动的为你去安装最新版本或者至少会询问是否安装。

碰到的一个问题是如何去卸载基于Adobe Air平台的应用。在不同的操作系统上卸载应用需要不同的步骤。在Windows上,Adobe Air应用的卸载过程跟一般软件的卸载过程是一样的。在Mac上,由于笔者缺乏使用Mac的经验,对此不是很清楚,如果说Mac上卸载Adobe Air应用的步骤存在不同的话,希望Mac的相关使用者能够在文章的后面加上评论。

Ubuntu上移除Adobe Air应用 (Linux):
方法1: (简单的方法)

1. 下载你想要卸载的应用(最好在电脑中本来就存在着应用的原安装程序)。
2. 打开 应用程序(Applications) ->附件(Accessories) ->’Adobe Air Application Installer’ ,选择你所下载过来的应用。
3. 在提示界面,选择”Uninstall”.
4. 应用被删除

方法 2: (另外一种简单方法)

1. 打开 ‘应用程序(Applications) -> 添加删除程序(Add/Remove Programs)’ 然后查找你想要移除的应用. e.g. Friendfeed, TweetDeck etc.
2. 去掉这个应用之前的勾选.
3. 点击“应用“并且确认.
4. 搞定
5. 更新: 在Ubuntu 9.10版本里,你可以从Ubuntu软件中心删除Adobe Air应用。

方法 3: (比较Geek的方法)

1. 打开终端
2. 输入 ’sudo dpkg -S /opt/*’ (不带单引号).
3. 你将会得到类似如下输出:

adobeair1.0: /opt/Adobe AIR
boxee: /opt/boxee
app.destroyflickr.f242b970c206039aa6d597ec43895e3dd9c3cfe0.1: /opt/DestroyFlickr
app.destroytwitter.23ca2f9b070e2fb8c4472f982f88b1a471f11ae2.1: /opt/DestroyTwitter
com.friendfeed.friendfeed.e15dd0e93fae91f55000c2534280f7d2e075d241.1: /opt/FriendFeed
picasa: /opt/google
com.seesmic.desktop.client.d89f32799270693bef34aaa36e9b2632b59240fa.1: /opt/Seesmic Desktop
com.nyt.timesreader.78c54164786ade80cb31e1c5d95607d0938c987a.1: /opt/Times Reader
tweetdeckfast.f9107117265db7542c1a806c8db837742ce14c21.1: /opt/TweetDeck

4. 比如要卸载TweetDeck, 输入’sudo dpkg -P tweetdeckfast.f9107117265db7542c1a806c8db837742ce14c21.1′
5. 你将会看到如下输出:

(Reading database … 117955 files and directories currently installed.)
Removing tweetdeckfast.f9107117265db7542c1a806c8db837742ce14c21.1 …

6. 搞定。

© 2011 《洛克.肖恩的救赎》 Suffusion theme by Sayontan Sinha