交叉编译环境的搭建(Linux-2.6.32内核)
来源:互联网 发布:温饱而知廉耻 编辑:程序博客网 时间:2024/05/17 13:45
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 : 依赖: gitE: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt-get -f install”(也可以指定一个解决办法)。
解决方案类似:
查看以安装的libc6
root@han-virtual-machine:/etc/apt# dpkg -l | grep libc6ii 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 -vUsing built-in specs.Target: arm-none-linux-gnueabiConfigured 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/binThread model: posixgcc 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/fixdepscripts/basic/fixdep.c:107:23: error: sys/types.h: No such file or directoryscripts/basic/fixdep.c:108:22: error: sys/stat.h: No such file or directorymake[1]: *** [scripts/basic/fixdep] Error 1make: *** [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 installedE: 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 libc6ii 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 1make: *** [menuconfig] Error 2
问题解释:缺少ncurses这个库,百度了发现是要ncurses-dev这个库。
#apt-get install ncurses-dev
再次make menuconfig,终于
root@han-virtual-machine:/Linux-2.6.32# make menuconfigscripts/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)
下一篇:
ARM开发板与PC通过NFS 网络文件系统挂接
感谢vickycq、poloshiao指导
求助关于32位库的问题
感谢Daniel Wood
编译Linux内核2.6.35.6实践
感谢duanlove
解决UbuntuServer14.10安装build-essential等软件依赖
*2017.05.18*
- 交叉编译环境的搭建(Linux-2.6.32内核)
- Linux交叉编译环境搭建和内核编译
- arm-linux交叉编译环境的搭建
- Linux嵌入式交叉编译环境 的搭建
- Linux嵌入式交叉编译环境 的搭建
- ARM-LINUX交叉编译环境的搭建
- Linux嵌入式交叉编译环境 的搭建
- linux 交叉编译环境的搭建
- Linux嵌入式交叉编译环境 的搭建
- linux交叉编译环境的搭建
- 【Linux内核驱动】搭建Android驱动交叉编译环境
- linux交叉编译环境搭建
- 嵌入式Linux开发必要环境搭建(虚拟机共享文件夹,交叉编译器,内核编译库)
- Linux环境的搭建(一)—搭建交叉编译环境
- Linux 2.6.37.1内核的交叉编译
- Linux 2.6.37.1内核的交叉编译
- 交叉编译环境的搭建
- 交叉编译环境的搭建
- 一行文字超出用省略号或滚动处理小技巧
- 5. Cordova照相机和阶段性分析
- eclipse中导入Dynamic 动态项目
- 动态添加SELECT标签中的元素,数据项与option数据源不一致
- CSS 让同一行的图片和文字对齐
- 交叉编译环境的搭建(Linux-2.6.32内核)
- [k8s]busybox&alpine
- 使用极光/友盟推送,APP进程杀死后为什么收不到推送
- Android 实验——实现查看网络图片功能
- hibernate保存实体类报错com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
- linux gprs模块 sim800a 芯片 ppp拨号上网
- eas bos 常用代码
- ubuntu笔记4
- Ngrok的使用