基于x86

编程入门 行业动态 更新时间:2024-10-06 12:19:35

基于x86

基于x86

交叉编译保姆级教学

  • 1.什么是交叉编译
  • 2.为什么需要交叉编译
  • 3.怎么进行交叉编译
    • 2.1 开始前准备
      • 2.1.1 背景介绍:
      • 2.1.2 开始前的准备:
    • 编译kernel
    • 编译phy driver生成可加载的ko文件

1.什么是交叉编译

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。

2.为什么需要交叉编译

主要原因是:嵌入式系统中的资源太少

具体的解释就是:交叉编译出来的程序,所要运行的目标环境中,各种资源,都相对有限,所以很难进行直接的本地编译

最常见的情况是:在进行嵌入式开发时,目标平台,即嵌入式开发板,比如是最大主频200MHz的ARM的CPU,加上32M的RAM,加上1G的Nand Flash等等。在如此相对比较紧张的硬件资源的前提下,在已经运行了嵌入式Linux的前提下,是没法很方便的直接在嵌入式Linux下,去本地编译,去在ARM的CPU下,编译出来,供ARM的CPU可以运行的程序的。因为编译,开发,都需要相对比较多的CPU,内存,硬盘等资源,而嵌入式开发上的那点资源,只够嵌入式(Linux)系统运行的,没太多剩余的资源,供你本地编译。

3.怎么进行交叉编译

2.1 开始前准备

2.1.1 背景介绍:

本机:Ubuntu20.04 kernel-5.4.0 架构:x86_64
客机: 统信UOS kernel-4.4.131 架构:aarm64
目的:在本机编译phy driver ko文件给客机装载使用

2.1.2 开始前的准备:

1.下载kernel: 网上下载kernel-4.4.131于本机(客机在客户那里)国内镜像kernel加速地址找到对于版的kernel解压
2. 下载安装aarch64-linux-gnu-gcc: 因为客户机器架构是arm64的所以下载这个交叉编译工具下载地址
添加环境变量:vim /etc/profile
最后写export PATH=$PATH:(解压后目录路径:pwd查看)/bin
然后重启生效,将原来的代码注释掉,改成自己的代码

编译kernel

切入解压kernel的目录,打开顶层的Makefile,找到代码段
改成下面的样子。注意是arm64 而不是arm

  ARCH»   »       ?=arm64CROSS_COMPILE»  ?=aarch64-linux-gnu-#ARCH»  »       ?= $(SUBARCH)#CROSS_COMPILE» ?= $(CONFIG_CROSS_COMPILE:"%"=%)

然后make menuconfig 将网络支持编译到内核树中去,因为我要编译的驱动是phy driver所以这个开关一定到打开,其他pci驱动就打开pci开关
[*] Networking support
然后
make -j4

编译phy driver生成可加载的ko文件

jlsemi:是phy driver
KERNELDIR: 是刚刚下载的kernel

新建交叉编译的Makefile

CROSS_COMPILE :=aarch64-linux-gnu-
ARCH :=arm64
CC :=$(CROSS_COMPILE)gcc
LD :=$(CROSS_COMPILE)ld
obj-m :=jlsemi.o
KERNELDIR :=/home/jojo/linux-4.4.131
PWD :=$(shell pwd)modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:rm -f *.orm -f *.symversrm -f *.orderrm -f *.korm -f *.mod.c

编译完成生成ko文件

更多推荐

基于x86

本文发布于:2024-03-14 09:55:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736216.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!