以下是当前鼎桥ecube路由器的软件信息:

4G鼎桥路由器,ecube电梯网关

root@eCube:/etc# cat os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

uname -r
4.19.149-g55f7eeb

cat /proc/version
root@eCube:/proc# cat version
Linux version 4.19.149-g55f7eeb (root@ctuphisprc00774) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05), GNU ld (Linaro_Binutils-2017.05) 2.27.0.20161019) #1 SMP Thu Nov 19 17:54:25 CST 2020



root@eCube:~/setserial-2.17# ldd --version
ldd (Debian GLIBC 2.28-10) 2.28

没有官方提供的内核源码文件和头文件,现在需要为它匹配源码。

#从瑞芯微官网下载瑞芯微内核最接近的版本:

#4.19.232

#根据系统信息Linaro GCC 6.3-2017.05下载交叉编译工具:

wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz



#解压工具链:
#将下载的工具链解压到 /usr/local 目录下:
sudo tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz -C /usr/local

/etc/profile 内添加环境变量:

export PATH=$PATH:/usr/local/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin

#使配置生效:
source /etc/profile
验证安装:
查看交叉编译器版本:
aarch64-linux-gnu-gcc -v

安装基本构建工具:
sudo apt-get install build-essential
安装 CMake:
sudo apt-get install cmake
安装其他常用工具:
sudo apt-get install make libncurses-dev libssl-dev zlib1g-dev wget git unzip python3 python3-pip bc
安装 32 位运行库(如果需要):
sudo apt-get install lsb-core lib32stdc++6
通过以上步骤,你应该能够在 Ubuntu 系统上成功搭建适用于目标主板的交叉编译环境。如果在安装过程中遇到问题,可以参考具体的错误信息进行排查和解决。

 

 

加载默认配置
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc px30_linux_defconfig
HOSTCC scripts/kconfig/conf.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config

 

#通过图形界面配置编译版本号-g55f7eeb,这个和路由器现有的保持一致,否则编译出的模块插入时会报错。

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc  menuconfig

#修改系统版本描述等为主板兼容:
general config --->local version内增加:
-g55f7eeb
Makefile 中修改 4.19.232的232版本号为149

CONFIG_ARM64_LSE_ATOMICS=n #否则加载模块报错,这个时匹配鼎桥ecube的原子操作,去掉这个属于对单核心主板的优化,其他型号的主板可能不需要修改

 

#开始编译:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc

 

 版本号含义说明:

4.19.149-g55f7eeb SMP mod_unload aarch64
内核版本号(4.19.149-g55f7eeb)
表示模块编译时使用的内核源码版本。
4.19.149:主版本号、补丁级别、子版本号。
-g55f7eeb:Git 提交哈希(或本地版本后缀),标识编译时的具体代码快照。
SMP(Symmetric Multi-Processing)
表示模块编译时内核启用了多处理器支持(CONFIG_SMP=y)。如果当前内核未启用 SMP,模块将无法加载。
mod_unload
表示模块支持卸载(CONFIG_MODULE_UNLOAD=y)。如果当前内核未启用模块卸载功能,模块也无法加载。
aarch64
表示模块编译的目标架构是 64 位 ARM(AArch64)。如果当前内核运行在其他架构(如 x86_64 或 32 位 ARM),模块将无法加载

 

 

#正常编译完成后,进入源码目录提取头文件:
make headers_install INSTALL_HDR_PATH=/tmp/kernel-headers
#打包头文件
tar -czvf kernel-headers-4.19.tar.gz -C /tmp/kernel-headers/include/ .


#拷贝安装到路由器,头文件的默认安装位置:
#头文件会被安装到 /usr/include/ 下,结构为:

/usr/include/asm/
/usr/include/linux/
/usr/include/generated/

 

 

路由器内使用头文件编译驱动模块

在编译内核模块时,确保使用与内核版本匹配的头文件:
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
  • -C 指定内核源码目录(包含头文件和编译脚本)。
  • M=$(pwd) 指定模块源码路径。