怎样go 交叉编译译Linux内核

21ic官方微信-->
linux内核编译的一些心得
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
本帖最后由 David~ 于
22:20 编辑
发这帖子主要是希望能帮助一些初学者能尽快解决内核编译过程中遇到的一些奇葩问题。
宿主机是centos7 64位的linux,GCC是4.8.0的版本,arm-linux-gcc是3.4.1的版本,被编译的linux源码是2.6.28.7的版本,编译过程遇到不少问题,现在把解决方法总结如下:
1.& && &&&为避免出现各种奇葩问题,在编译内核代码之前最好先确认宿主机是否安装有arm-linux-gcc,可以用查看交叉编译器的版本命令来确认:arm-linux-gcc –v如果返回命令找不到的错误,这说明arm-linux-gcc未正确安装,现在说说如何正确安装arm-linux-gcc:
1.& && &&&把arm-linux-gcc交叉编译工具拷贝到宿主机这个目录下:/usr/local
2.& && &&&解压交叉编译工具,然后找到解压的交叉编译工具链,再里面找到arm文件夹,把arm文件夹拷贝到/usr/local路径下,拷贝完后完整的路径应该是:/usr/local/arm
3.& && &&&然后定义环境变量,这样的话每次使用arm-linux-gcc命令,系统都能自动匹配到交叉编译工具链所在的文件夹目录了(假设交叉编译工具链的文件夹目录是/usr/local/arm/3.4.1/bin),具体的方法如下:
?& && &&&方法一:修改/etc/bash.bashrc文件
?& && &&&#vim /etc/bash.bashrc
?& && &&&在最后加上:
?& && &&&export PATH=$PATH:/usr/local/arm/3.4.1/bin
?& && &&&export PATH
?& && &&&方法二:修改/etc/profile文件:
?& && &&&# vim /etc/profile
?& && &&&增加路径设置,在末尾添加如下,保存/etc/profile文件:
?& && &&&export PATH=$PATH:/usr/local/arm/3.4.1/bin
?& && &&&方法三:#export PATH=$PATH:/usr/local/arm/3.4.1/bin
?& && &&&注:(这只能在当前的终端下才是有效的!)
4.& && &&&使环境变量生效,不需重启电脑(注:source后面加一个空格)
?& && &&&方法一:source /root/.bashrc
?& && &&&方法二:source /etc/profile
5.& && &&&检查路径是否加入到环境变量PATH中:echo $PATH 如果显示的内容中有/usr/local/arm/bin,说明交叉编译工具的路径已经加入到PATH中,支持交叉编译工具安装完成。
6.& && &&&测试是否安装成功:arm-linux-gcc –v,如果显示以下信息说明已经安装成功
如果出现以下提示
则说明arm-linux-gcc还未安装成功,主要原因是我们的宿主机系统是64位的操作系统,里面缺少32位的libc库,需要另外安装才可以在64位系统下使用32位的交叉编译工 具,具体方法为使用yum命令安装X86的lib库,命令为:yum installglibc.i686。
如果此时运行arm-linux-gcc –v还提示错误error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory,则继续执行以下命令yum install libstdc++.so.6 。经过这2步,问题应该能得到彻底解决。至此,交叉编译工具安装结束。
2.& && &&&确认完arm-linux-gcc安装成功后,现在是要确认被编译的内核源码路径了,被编译的内核源码必须放在这个目录下:/usr/src/xxxx,其中xxxx便是你要编译的内核源码,否则运行make menuconfig时会出以下错误:make: *** No rule to make target `menuconfig'.&&Stop.
3.& && &&&路径确认完毕后,此时再执行make menuconfig命令,运气好的话应该会弹出以下界面:
看到这个界面,肯定是说明内核已经可以成功编译了,运气差的话可能就会看到这个界面了:
为什么会提示mix implicit and normal rules. Stop.呢?这是由于我们的宿主机make管理器版本太高了,linux(centos/fedora)在高版本的make管理器里面都不支持隐式和显式的混合定义方式了,这样只能修改makefile文件了,具体修改方法如下:
错误提示的是第442行有错误,所以进入makefile文件,找到第442行,原代码为:config %config: scripts_basic outputmakefile FORCE ,将其修改成%config: scripts_basic outputmakefile FORCE,然后再执行make menuconfig命令,此时可能还会弹出一个错误信息,如下所示:
说明第1607行还有错误,进入makefile的1607行进行查看,第1607的原代码为:/ %/: prepare scripts FORCE,将其修改为%/: prepare scripts FORCE,然后再执行make menuconfig,此时肯定能看到思慕已久的界面了:&&
如果此时还没有看到这个界面,基本能说明你的交叉编译工具是有问题的了,它不支持编译你当前的内核版本(2.6.28),可以考虑更换工具链了。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
http://gt566.taobao.com/
http://gt566.taobao.com/
现在主流的版本都是3.xx的,2.6.x的应该不算主流的芯片
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
现在主流的版本都是3.xx的,2.6.x的应该不算主流的芯片
对,这只是我拿几年前买的开发板上的内核来玩玩的。
http://gt566.taobao.com/
http://gt566.taobao.com/
那还不如随便拿个手机玩玩,手机玩linux很容易。安装个 linux应用就成,甚至能装完整的ubuntu
老国产板子,教程烂.更新无
还不如用beaglebone black
学习了 先mark一下
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
老国产板子,教程烂.更新无
还不如用beaglebone black
大牛开炮了^^
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
感谢管理给盖了个章哈!
扫描二维码,随时随地手机跟帖
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术高手奖章
人才类勋章
技术领袖奖章
人才类勋章
技术新星奖章
人才类勋章
时间类勋章
您需要登录后才可以回帖
热门推荐 /5怎样交叉Linux内核?
全部答案(共1个回答)
进行:
(1)make mpope
编译之前检查内核源码树是否“纯净”(clean),必作。
(2)make ARCH=am CROSS_COMPILE=am-iwmm...
使用的交叉编译器是am-iwmmxt-linux-gnueai-gcc(4.2.1),选用的内核版本是Linux-2.6.22.6。以下操作均以普通用户身份进行:
(1)make mpope
编译之前检查内核源码树是否“纯净”(clean),必作。
(2)make ARCH=am CROSS_COMPILE=am-iwmmxt-linux-gnueai- menuconfig
配置内核。2.6内核早已支持图形界面的xconfig和gconfig,不过还是推荐使用menuconfig,更容易配置。选择使用PXA270处理器的mainstone开发板作为目标系统进行试验(Intel HCDDBBVA0 Development Platfom),并精简不必要的选项和模块。
内核配置选项中目标系统名称与具体开发板的对应关系可以查看achammach-pxaKconfig文件。
配置完毕选择保存,默认会将当前配置保存到.config文件,也可以指定一个文件名如test.config,下次配置时可以load这个文件加载相应的配置。
(3)make ARCH=am CROSS_COMPILE=am-iwmmxt-linux-gnueai-编译内核。
可能遇到nvam.c中“undefined efeence to `tc_lock'”的错误。修正办法是:在nvam.c中“#include ”,修改includelinuxmc146818tc.h文件,将其中对“#include ”一段的条件编译选项“#ifdef __KERNEL__ …… #endif”去掉。
编译完毕可以使用命令"echo $?"检查编译是否正常完成,正确结果为0。
这时在内核源码树顶层目录生成了vmlinux(ELF格式的非压缩内核)以及相应的符号表文件System.map,可以直接下载到内存进行调试。另外还生成了achamootcompessedvmlinux(ELF格式的压缩内核),还有achamootzImage(压缩内核映像文件)。
查看vmlinux文件信息如下:
[aaonwong@localhost linux-2.6.22.6]$ file vmlinux vmlinux: ELF 32-it LSB executale, ARM, vesion 1 (SYSV), statically linked, not stipped
(4)make ARCH=am CROSS_COMPILE=am-iwmmxt-linux-gnueai- INSTALL_MOD_PATH=${TESTROOTFS} modules_install
安装内核模块。先定义一个${TESTROOTFS},将模块安装到这里。
(5)安装内核。
a)cp vmlinux ${TESTROOTFS}ootvmlinux-2.6.22.6 )cp System.map ${TESTROOTFS}ootSystem.map-2.6.22.6 c)cp .config ${TESTROOTFS}ootconfig-2.6.22.6
交叉编译器工作方法编辑首先编译器进行语法分析,也就是要把那些字符串分离出来
一。准备工作安装linux环境(我的是RED_HAT9 linux2.2的内核)
下载交叉编译文件包 cross-2.95.3.tar.bz2
二。建立目录1....
通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序
答: Windows NT操作系统是以“域”为单位实现对网络资源的集中管理。在一个Windows NT域中,只能有一个主域控制器,它是一台运行 Windows NT ...
答: 2010版的..
答: 你没有备份吧,
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区如何编译uClinux内核
在电子工程世界为您找到如下关于“如何编译uClinux内核”的新闻
如何编译uClinux内核资料下载
(1)、uC/OS-II文件目录介绍
(2)、程序讲解
(3)、超级终端显示温度
(4)、编写程序更改超级终端上显示字体和背景的颜色
6、uCOSII_uCGUI实现彩色液晶显示
第四章 嵌入式uclinux讲解
一、u-boot移植和分析(90分钟)(第七讲)
1、u-boot介绍
2、u-boot移植介绍
3、u-boot代码烧写进FALSH
4、代码编译分析...
uClinux内核。所提到的uClinux版本是uClinux-dist-.tar.gz,并且已经使用了www.dailzh.net上提供的patch。并且我有义务告诉您,这一调试方法可行,但尚需要完善。步骤一:使编译器输出dwarf-2格式的调试信息修改uClinux-dist/linux-2.4.x下Makefile,将CFLAGS_KERNEL设置为-gdwarf-2然后重新编译...
Dhrystone 2.1进行编译
Modelsim仿真运行Dhrystone Benchmark
在线可编程的FPGA SoC设计工程
Dhrystone Benchmark在开发板中运行
第九章:ucLinux仿真--结合Skyeye,启动不带MMU的操作系统
Skyeye是ARM9处理器的软件模拟器,通过它解析...
器7.2.2 GNU Make7.2.3 使用GDB调试程序7.3 建立uClinux开发环境7.3.1 建立交叉编译器7.3.2 uClinux针对硬件的改动7.3.3 编译uClinux内核7.3.4 内核的加载运行7.4 在uClinux下开发应用程序7.4.1 串行通信7.4.2 socket编程7.4.3 添加用户应用程序到uClinux7.4.4 通过网络添加应用程序到目标系统7.5 本章小结...
7.3.3 编译uClinux内核
7.3.4 内核的加载运行
7.4 在uClinux下开发应用程序
7.4.1 串行通信
7.4.2 socket编程
7.4.3 添加用户应用程序到uClinux
7.4.4 通过网络添加应用程序到目标系统
7.5 本章小结
第8章 ARM ADS集成开发环境的使用
8.1 ADS软件组成介绍...
如何编译uClinux内核 如何编译uClinux内核...
调试环境等; 2、嵌入式硬件平台构建,涉及硬件平台选型、地址分配等; 3、U.Boot移植,涉及U-Boot启动分析、移植分析等; 4、嵌入式操作系统移植,涉及uClinux内核结构、移植分析等; 5、驱动程序的开发,涉及硬件分析、Linux下驱动分析等; 与此同时,安全防范系统作为现代化的安全警卫手段,近年来正越来越多地进入各个行业的各种应用领域,智能家居已经成为高科技发展必然的趋势。另外,运营商...
如何编译uClinux内核相关帖子
在开发板中运行
第九章:ucLinux仿真--结合Skyeye,启动不带MMU的操作系统
Skyeye是ARM9处理器的软件模拟器,通过它解析ucLinux内核,可以在软件平台上运行嵌入式软件。本章建立了Modelsim的仿真环境,加载同样的ucLinux内核,可以打印出同Skyeye一样的启动信息。在这个过程中,用户可以通过查看波形,从RTL设计工程师的角度解析嵌入式操作系统...
现在用的ARM7板子是立宇泰的44B0型的,在编译uclinux内核的时候出现了问题,make user_only的时候报错。我在网上查了下,原因是原来的那个配置文件需要替换,我按网友的文章到立宇泰官网上下载该配置文件发现貌似立宇泰已经把它删除了(因为是很早以前的东西了2007年左右的了)呵呵,如果谁以前用过该板子而且下过该配置文件的话,给往eeword上传一份。不胜感激。
[ 本帖最后由 范小...
头文件讲解
(10)、u-boot用网口烧写uclinux内核并且固化到FLASH中运行的流程分析
4、字符驱动程序(15分钟)(第八讲)
(1)、字符驱动简介
(2)、file_operations结构体介绍
5、GPIO字符驱动程序(130分钟)(第八讲)
(1)、驱动程序编写
(2)、快照的使用
(3)、内核配置
(4)、内核编译
(5)、演示实验
6、中断字符驱动...
进程间通信: 进程通信的基本概念,管道、信号、消息队列、信号量、共享内存。
网络通讯接口,socket通信编程。
串口通讯程序和编程实践
多线程程序设计
5.Linux设备驱动:
uClinux内核模块及设备驱动程序开发
介绍linux驱动程序分类和各自操作系统上下层接口
驱动开发实例:蜂鸣器驱动、按键驱动开发、串口驱动、触摸屏驱动、网络驱动开发、USB驱动、液晶屏驱动...
uclinux内核的打印信息怎样去掉?
应该是打印信息重新定向,内核应该有配置的地方,可惜我没找到
不知哪位达人能帮忙指点下
再具体介绍下问题的由来:当驱动报错时,会在板子外接的lcd屏上显示报错信息,
这些信息应该是内核打印信息,我就是想把那些报错信息屏蔽掉。 uclinux内核的打印信息怎样去掉?大侠帮忙~~~ 这里好象没有人搞Linux的,所以请到别的论坛上问一下吧
我才刚开始学...
了的数据包啊?是不是我在编译uclinux内核的时候少选了什么选项呢?
  请各位指点,谢谢。 uClinux为什么不能接收大于1500的数据包? 补充一下,我这个客户端程序在计算机上运行的时候是能够接收到大于1472的数据的(事实上,在计算机上它能够接收到10K大小的数据),但是当把这个客户端放到开发板的uClinux中运行的时候,就出现了上述问题,所以我觉得应该是uClinux配置的问题...
的ramdisk 区域;根据用户选择,进入命令行模式或启动kernel。在我们使用的开发板上,kernel 选用uClinux。由于Flash 的存储空间有限,所以存放在Flash 中的uClinux内核是经过压缩的。Blob 将压缩的uClinux 内核加载到SDRAM地址0x0c300000。假如选择启动uClinux,那么压缩的uClinux内核将自解压.Text段到0x0c00800(见uClinux...
进程间通信: 进程通信的基本概念,管道、信号、消息队列、信号量、共享内存。
网络通讯接口,socket通信编程。
串口通讯程序和编程实践
多线程程序设计
5.Linux设备驱动:
uClinux内核模块及设备驱动程序开发
介绍linux驱动程序分类和各自操作系统上下层接口
驱动开发实例:蜂鸣器驱动、按键驱动开发、串口驱动、触摸屏驱动、网络驱动开发、USB驱动、液晶屏驱动...
前段时间,将uclinux内核移植到了Visual DSP 5.0下,也就来说说对Vdsp5的一些看法。
总的说,VDSP5还是一个比较不错的IDE的,面对23M的dxe文件,都能正确地进行调试,虽然其下载速度变慢,大概要4分钟左右才可以下载完。
对VDSP的意见集中在下面几个方面:
1、不支持空行。
比如仅仅在一行上打上一个分号,VDSP就会有强烈的意见。这一点可能不应该把帐算在...
linux操作系统原理及组成
介绍linux系统目录组织结构
linux 运行基理,系统运行过程
配置裁减编译linux内核
4.讲解Linux进程特性:
进程属性和状态转换;进程控制与调度;进程相关系统调用,构建守护进程
进程间通信: 进程通信的基本概念,管道、信号、消息队列、信号量、共享内存。
网络通讯接口,socket通信编程。
串口通讯程序和编程实践
多线程程序设计...
如何编译uClinux内核视频
你可能感兴趣的标签
热门资源推荐为树莓派交叉编译新内核 - 为程序员服务
为树莓派交叉编译新内核
在深入学习
Linux Device Driver 3rd ed.
到控制外部硬件和中断时,我发现书中的例子使用的并口在当前的环境下无法找到了(至少我这里时这样的,很难找到带并口的计算机了)。但是,又不能随便的跳过这么具有实践性的一章。思来想去,无意中看到了桌上的树莓派,于是产生了在树莓派上直接利用GPIO来测试和学习驱动的想法,那么第一步就是搭建驱动的编译运行环境了
1. 准备工作
1.1 参考的资料列表
能够完成本次任务要特别感谢Google(注意一定是Google而不是baidu)做出的杰出贡献,其次下面列出的参考资料更有实质性的内容:
1.2 交叉编译的系统要求
这里我使用了安装有
系统的X86架构计算机。这里强烈建议你使用
操作系统来安装交叉编译工具。
2. 安装交叉编译工具链
下载最新的交叉编译工具,下载坐标 -&
将工具放置在一个合适的位置(关键看你觉得哪里合适了,可以是/,也可以是~)。
将工具链文件夹下的
/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
(如果你的主机是64位系统,请用
/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
)路径加入到当前用户的环境变量中。
3. 下载内核源文件
下载内核文件有两种方法:
下载。需要注意的是,该repo有很多的分支,请选择自己需要使用的分支。
sudo apt-get install linux-source-X.X
来下载需要的X.X版本内核。下载完成后可以在树莓派的
目录下找到内核源码的压缩包,将其远程复制到我们的交叉编译主机即可。
4. 交叉编译
到这一步我们就离成功不远咯。
首先我们需要建立几个环境变量,在交叉编译的过程中使用:
CROSS_COMPILE=arm-linux-gnueabihf-
用以指定我们的交叉编译器。
KERNEL=kernel7
,用处不详,但是官方的指南中写了,就照做吧。
解压并进入内核源码目录,并执行如下的命令
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} mrproper
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} clean
将原来内核的配置文件用做我们新内核的配置(如果不需要,可以跳过):
zcat /proc/config.gz & ~/config
文件复制到交叉编译主机中内核源码树下。
如果编译环境没有安装
,则需要先安装
sudo apt-get install libncurses-dev
。安装好之后进行内核的配置:
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} menuconfig
在界面中选择所需的配置选项,保存并退出。
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} zImage
编译内核。刻意使用
来指定编译参与的核心数量。
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} modules
编译模块。刻意使用
来指定编译参与的核心数量。
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} dtbs
来执行一些其他的工作,同样可以使用
来执行参与的核数。
安装新的内核:
首先生成模块目录:
设置环境变量
export MODULES_TEMP=~/modules
,用以临时保存生成的模块。
make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} INSTALL_MOD_PATH=${MODULES_TEMP} modules_install
安装模块到临时目录。
复制模块和内核镜像
将源码目录中
arch/arm/boot/zImage
复制到树莓派的
注意将其重新命名
为一个新的名字,这里使用
kernel_new.img
将生成的模块复制到树莓派中,将目录
lib/modules/
中生成的文件夹复制到树莓派的
/lib/modules/
修改文件,使得默认启动新的内核。
修改树莓派的
/boot/config.txt
文件,修改其中的
kernel=kernel_new.img
,如果没有此项目,可以新建。
5. 注意事项
用这种方法编译的内核,并不能直接用来进行驱动的编译。如果需要编译驱动,依然要使用交叉编译。
For thine is the kingdom, the power, and the glory, for ever.
原文地址:, 感谢原作者分享。
您可能感兴趣的代码下载arm-linux-gcc 4.2.3
安装arm-linux-gcc 4.2.3sudo tar& xvzf arm-linux-gcc-4.3.2.tar.gz& -C /
此时将安装到/usr/local/arm下面
设置环境变量
gedit ~/.profile在打开的文件最后加入以下命令export PATH=$PATH:/usr/local/arm/4.3.2/bin
接着执行: source ~/.profile
然后输入 arm-linux-gcc -v ,如果能显示到版本就代表成功了
要编译内核之前,需要先注销一下再进入系统,我也不知道为什么
linux 内核编译
下载linux 2.6.26 内核源代码
解压下载下来的压缩包,修改解压出来的根目录中的makefile文件,定位到193行处
更改为#ARCH& ?= $(SUBARCH)#CROSS_COMPILE ?=ARCH& ?= armCROSS_COMPILE ?= arm-linux-
make menuconfig&选择 Load an Alternate Configation File 回车删除.config,& 输入linux-2.6.26/arch/arm/configs中你要选择的XXXXX_defconfig文件的绝对路径
选择 save an Alternate Configation File 回车此处显示的是我们刚选择的defconfig文件路径,删除掉,改为linux 2.6.26 解压路径下的.config(XXXXXX/.config)
make zImage
编译顺利的话,几分钟后会在arm/boot 下生成 zImage
参考文章:
最后还有一个差不多的例子:
链接地址:
阅读(...) 评论()

我要回帖

更多关于 交叉编译 的文章

 

随机推荐