1、创建安装目录
#mkdir /usr/local/arm
如果您的PC 端linux 系统已经有这个文件夹,这步就跳过
2、将交叉编译工具解压到安装目录(注意C是大写)
#tar -xjvf arm-linux-gcc-4.3.2.tar.bz2 -C /usr/local/arm/
3、修改环境变量
#gedit /etc/bash.bashrc
在最后一行一行加上
PATH=$PATH:/usr/local/arm/arm-linux-gcc-4.3.2/bin
通过gedit编辑器修改防止出错后恢复麻烦
注意该行内容不能写错,否则会很麻烦
若是出现 [root@fei3 src]# vim /etc/profile-bash: vim: command not found
在命令行中输入 #export PATH="/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/bin:/sbin"
4、启用环境变量
#source /etc/bash.bashrc
5、环境验证
#arm-linux-gcc -v
报错:
./arm-linux-gcc: No such file or directory
需要安装32位的兼容环境,方法如下:
#sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
出现版本依赖问题,继续报错:
下列软件包有未满足的依赖关系:
lib32bz2-1.0 : 预依赖: libc6-i386 (>= 2.9-18) 但是它将不会被安装
libc6:i386 : 依赖: libgcc1:i386 但是它将不会被安装
nylas : 依赖: git
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt-get -f install”(也可以指定一个解决办法)。
解决方案类似:
查看以安装的libc6
root@han-virtual-machine:/etc/apt# dpkg -l | grep libc6
ii libc6:amd64 2.19-0ubuntu69 amd64 GNU C Library: Shared libraries
问题解释:当前系统以安装的 libc6的版本为“2.19-10ubuntu2 “,而我们安装其他软件所依赖的是“2.19-0ubuntu6.9” 。
也就是问题在于,依赖的某个软件的版本,跟系统以安装的版本不一致。但 apt-get又不会自动去卸载以安装的自动安装上依赖的目标版本。所以导致我们需要手动去解决这个问题。当前解决这个问题办法有很多种,我们这里选择了,直接强制覆盖安装目标版本,替代原来系统已安装的版本。
# apt-get install libc6=2.19-0ubuntu6
类似报错还是这样解决:
1.安装时报错软件的依赖关系
2.查看版本
#dpkg -l | grep libc6
3.制覆盖安装目标版本,替代原来系统已安装的版本
#apt-get install libc6=2.19-0ubuntu6
解决了依赖问题,有版本显示则交叉编译环境已经建立了,如下图
root@han-virtual-machine:/Linux-2.6.32# arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
6、配置内核环境
1.解压Linux-2.6.32
#tar –zxvf Linux-2.6.32.tar.gz –C /
2.配置内核:
#make menuconfig
报错:
HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c:107:23: error: sys/types.h: No such file or directory
scripts/basic/fixdep.c:108:22: error: sys/stat.h: No such file or directory
make[1]: *** [scripts/basic/fixdep] Error 1
make: *** [scripts_basic] Error 2
解释:ubuntu中并没有所需要的库。所以上面的错误说sys/types.h找不到也是缺少库的原因。
解决方法:
安装lib6-dev
#apt-get install lib6-dev
报错:
The following packages have unmet dependencies:
libc6-dev : Depends: libc6 (= 2.19-0ubuntu6.9) but 2.19-10ubuntu2 is to be installed
E: Unable to correct problems, you have held broken packages.
以上报错的含义是:
libc6-dev: 依赖: libc6的 “ 2.19-0ubuntu6.9”版本, 但是系统已安装的是 “2.19-10ubuntu2” 。
理解了这层意思之后,接下来问题就迎刃而解了。
解决方案同上一样:
查看以安装的libc
root@ubuntu:/etc/apt# dpkg -l | grep libc6
ii libc6:amd64 2.19-10ubuntu.69 amd64 GNU C Library: Shared libraries
问题在于,当前系统以安装的 libc6的版本为“2.19-0ubuntu.69 ” ,而我们安装其他软件(包括build-essential 、g++等)的时候,所依赖的是“2.19-0ubuntu6” 。
也就是问题在于,依赖的某个软件的版本,跟系统以安装的版本不一致。但 apt-get又不会自动去卸载以安装的自动安装上依赖的目标版本。所以导致我们需要手动去解决这个问题。当前解决这个问题办法有很多种,我们这里选择了,直接强制覆盖安装目标版本,替代原来系统已安装的版本。
#apt-get install libc6=2.19-0ubuntu6.9
或者安装build-essential
若是出现依赖文件问题,解决方法跟上面相同,
而我的最终找到替换了libc-dev-bin(被libc6-dev(被build-essential依赖)
依赖)为2.19-0ubuntu6
诶,我这么说你懂了吧!
root@han-virtual-machine:/Linux-2.6.32# apt-get install libc-dev-bin=2.19-0ubuntu6
然后装libc6-dev(被build-essential依赖)
root@han-virtual-machine:/Linux-2.6.32# apt-get install libc6-dev
继续make menuconfig
结果,心态炸了
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2
问题解释:缺少ncurses这个库,百度了发现是要ncurses-dev这个库。
#apt-get install ncurses-dev
再次make menuconfig,终于
root@han-virtual-machine:/Linux-2.6.32# make menuconfig
scripts/kconfig/mconf arch/arm/Kconfig
3.编译内核
make一下,等个几分钟,大功告成。
总结:依赖问题
1.良好习惯
安装前
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade # 选项
再开始安装
比较不会碰到套件依赖版本问题
2.查看返回依赖
2-1. 查看 libbz2-1.0:i386 返回依赖于 libc6
sudo apt-rdepends libbz2-1.0:i386 | grep libc6
Depends: libc6 (>= 2.4)
libc6
Depends: libc6 (>= 2.14)
感谢vickycq、poloshiao指导
求助关于32位库的问题
感谢Daniel Wood
编译Linux内核2.6.35.6实践
感谢duanlove
解决UbuntuServer14.10安装build-essential等软件依赖
*2017.05.18*