基于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
发布评论