广州建企业网站,网页设计是啥意思,清博舆情监测系统,网站开发私活分成linux内核驱动具有通用性#xff0c;可以在内核驱动中跟随系统一同编译#xff0c;也可以通过模块形式编译。
这里介绍写在模块形式编译时本机编译与交叉编译的配置。
源代码是一样的#xff0c;只需要修改makefile文件即可。
这里以一个RK3588的驱动为例。
1. 本机编译…linux内核驱动具有通用性可以在内核驱动中跟随系统一同编译也可以通过模块形式编译。
这里介绍写在模块形式编译时本机编译与交叉编译的配置。
源代码是一样的只需要修改makefile文件即可。
这里以一个RK3588的驱动为例。
1. 本机编译一般Ubuntu系统具备
SUBARCH : $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/s390x/s390/ -e s/parisc64/parisc/ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ -e s/riscv.*/riscv/)
CURARCH ? $(SUBARCH)
ARCH ? $(SUBARCH)
PWD :$(shell pwd)
EXTRA_CFLAGS -Wall -g -I$(CURDIR) -I$(subst fuxi-linux-release-package/module_fuxi/src,common,$(PWD)) -I$(PWD)
EXTRA_CFLAGS -DFXGMAC_DEBUG
KSRC_BASE /lib/modules/$(shell uname -r)
KSRC $(KSRC_BASE)/build
KDST ./
ko_dir $(KSRC_BASE)/$(KDST)/
KFILE ***
ko_full $(ko_dir)$(KFILE).koyt6801-objs : ***.o
obj-m ***.omodules:make -C $(KSRC) M$(PWD) modulesinstall:echo KFILE: $(KFILE)echo KDST: $(KDST)make -C $(KSRC) M$(PWD) INSTALL_MOD_DIR$(KDST) modules_installsudo ls -l $(ko_dir)depmod $(shell uname -r)modprobe $(KFILE)file $(ko_full)echo install done.modinfo $(ko_full)uninstall:sudo ls -l $(ko_dir)sudo rm $(ko_full)sudo ls -l $(ko_dir)clean:make -C $(KSRC) M$(PWD) clean.PHONY:modules install uninstall clean
2.交叉编译
ARCH ? arm64
CROSS_COMPILE ? /home/gan/proj/rk3588_sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
PWD :$(shell pwd)KSRC /home/gan/proj/rk3588_sdk/kernelEXTRA_CFLAGS -Wall -g -I$(PWD)
EXTRA_CFLAGS -DFXGMAC_DEBUG
EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include
EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include/generated
EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include/generated/uapi
EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include/uapi
EXTRA_CFLAGS -I$(KSRC)/include
EXTRA_CFLAGS -I$(KSRC)/include/generated/uapiKFILE ***
ko_full $(ko_dir)$(KFILE).koyt6801-objs : ***.o
obj-m ***.omodules:make -C $(KSRC) ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE) M$(PWD) modulesclean:make -C $(KSRC) ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE) M$(PWD) clean
.PHONY:modules clean
从中可以看出主要区别有几点
交叉编译需要指定ARCH 、CROSS_COMPILE
KSRC 指linux目录本机编译在/lib/modules/下交叉编译根据linux源码目录来
重点的交叉编译需要指定EXTRA_CFLAGS 将需要的头文件包含进来主要是asm一类的头文件。把下面的包含了基本就行了。
EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include/generated EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include/generated/uapi EXTRA_CFLAGS -I$(KSRC)/arch/arm64/include/uapi EXTRA_CFLAGS -I$(KSRC)/include EXTRA_CFLAGS -I$(KSRC)/include/generated/uapi
交叉编译时在make指令需要指定ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE)表示是交叉编译。
如此一个驱动就可以从本机编译到交叉编译的轻松转换了。