1.为什么需要进行交叉编译

  1. 操作系统和体系结构不兼容。驱动需要运行在特定的操作系统和体系结构下,比如Linux内核驱动需要运行在ARM或x86体系结构的Linux系统上。而编译环境的操作系统和体系结构可能与运行环境不同,这时就需要进行交叉编译。
  2. 系统环境限制。许多嵌入式系统没有完整的开发环境,开发人员无法直接在目标系统上进行编译。这时需要在有完整工具链的主机上进行交叉编译,生成可在目标系统上运行的驱动。
  3. 驱动依赖内核头文件和lib头文件。这些头文件只在目标系统发行版中可用,开发主机上通常没有。交叉编译可以使用目标系统对应的交叉编译工具链,包含了内核头文件和库文件,以支持正确编译驱动。
  4. 兼容性要求。为了保证驱动在目标系统任意版本都能工作,需要使用严格兼容的目标系统内核头文件。只有交叉编译可以正确选择对应的交叉编译工具链版本。
  5. 二进制兼容性。交叉编译生成的驱动二进制文件直接兼容目标系统,可以直接在目标设备上运行,而不需要额外的转换或重编译工作。

所以总之,由于操作系统、系统环境和兼容性需求的影响,驱动通常需要采用交叉编译的方式来生成适用于特定目标系统的可执行代码。

2.交叉编译流程

交叉编译:在一个平台上生成另一个平台运行的代码

交叉编译工具安装步骤

需要:32位库、ubuntu、

1.安装 32 位库 sudo apt install lib32ncurses-dev lib32z1

2.将交叉编译工具压缩包复制到 Ubuntu(路径没有要求)

3.将其解压到根目录 sudo tar -xf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /

4.在 Ubuntu 的/etc/profile 文件末尾添加一句 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin

保存退出 (其中 export 是 Linux 中的 shell 指令,作用设置环境变量 , $PATH 获取 PATH 变量中的值,:(冒号)作为不同路径间的分隔符)

5.使环境变量生效 source /etc/profile 6>arm-linux-gcc -v 查看版本信息

驱动 交叉编译_交叉编译

当出现这个界面就说明环境变量设置好了