交叉编译Cross Compilation

参考百度知道
举个例子来解答。
我们的电脑PC的CPU是intel或者AMD的,这种CPU全部是x86架构的,内在指令是一样的。
而嵌入式linux的CPU一般是ARM的,这种CPU的指令架构和x86完全不同。
如果,你在电脑上写了个C语言程序,然后编译运行,但是这种程序只能在PC上,也就是intel或AMD的CPU上运行。你下载到ARM的机器上是不能运行的。
如果想要运行,就要在PC上根据ARM的指令架构来编译程序。
这种在这种架构的CPU机子上编译另外一种架构CPU的软件,就叫做“交叉”编译。交叉CROSS就是这个意思。

Cross compilation for ARM based Linux systems我目前的理解是在x86架构的Linux系统上编译适用于arm架构的OpenCV,所以在Prerequisites里要事先安装交叉编译工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统中,内核(kernel)是操作系统的核心组件,它负责管理系统的硬件资源和提供各种系统服务。内核模块(kernel module)是一种可动态加载和卸载的程序,可以在运行中向内核添加新的功能或修改现有功能。 交叉编译(cross compilation)是指在一台计算机上编译生成另一种体系结构(如ARM)下的可执行文件。由于内核模块需要与内核紧密配合,因此需要使用与目标平台相同的工具链进行交叉编译。 以下是在Linux系统中交叉编译内核模块的基本步骤: 1. 安装交叉编译工具链 根据目标平台的体系结构,安装相应的交叉编译工具链。例如,在Ubuntu系统中,可以使用以下命令安装arm-linux-gnueabi交叉编译工具链: ``` sudo apt-get install gcc-arm-linux-gnueabi ``` 2. 配置交叉编译环境 在编译内核模块之前,需要设置交叉编译环境变量。例如,要编译ARM架构的内核模块,可以使用以下命令设置环境变量: ``` export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- ``` 其中,ARCH指定目标平台的体系结构,CROSS_COMPILE指定交叉编译工具链的前缀。 3. 编写内核模块代码 根据需要,编写内核模块的代码。内核模块代码通常包括init函数和exit函数,分别在模块加载和卸载时执行。 4. 编译内核模块 使用交叉编译工具链编译内核模块。例如,下面的命令编译名为hello的内核模块: ``` make -C /path/to/kernel/source M=$PWD modules ``` 其中,-C选项指定内核源代码的路径,M选项指定内核模块所在的目录。 5. 加载内核模块 将编译生成的内核模块(.ko文件)复制到目标平台上,使用insmod命令加载模块: ``` insmod hello.ko ``` 6. 卸载内核模块 使用rmmod命令卸载内核模块: ``` rmmod hello ``` 以上就是在Linux系统中交叉编译内核模块的基本步骤。在实际应用中,还需要考虑内核版本、编译选项等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值