以下是当前鼎桥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)指定模块源码路径。
浙公网安备 33010602011771号