当前位置: 首页 > news >正文

驱动移植【简略版】

一、RTC时钟

测试一下看看能不能用就行

二、LED指示灯驱动

1.在设备树找到LED的节点,改对应的引脚,

在这里插入图片描述

2.还需要注意引脚的复用引脚有没有被其它东西占用,可以通过NXP官方提供的cofingue tool软件去查看,注释掉就行

在这里插入图片描述

三、RJGT102加密芯片驱动

1.rjgt102.tar.gz.temp文件拉进去虚拟机,在虚拟机下改名为rjgt102.tar.gz为压缩包文件。
2.cd 到 /home/hugo/Demo 目录下

把rjgt102.tar.gz拷贝到 /home/hugo/Demo 目录下

cd /home/hugo/Demo
3.在工作目录解压rjgt102.tar文件
hugo@hugo-virtual-machine:~/Demo$ tar -xvf rjgt102.tar.gz
4.修改i2c.c里面对应i2c节点:

根据原理图,看加密芯片接在I2C总线哪个编号,修改i2c.c里面对应i2c节点。(在原理图中,是I2C1,但是在代码中是I2C0,从0开始算起的)
在这里插入图片描述

在这里插入图片描述

5.修改Makefile交叉编译路径,按照自己实际情况去修改。

我这里的有一个环境变量配置文件,已经包括了交叉编译器所在的路径,我在编译文件前,都会先激活这个环境变量配置文件,让它生效,所以我这里的Makefile不需要配置完整的CC交叉编译器路径。

5.1 (我的环境变量配置文件路径:)

在这里插入图片描述

5.2 修改后的Makeifile文件
  • (只是回顾:可以看交叉编译2 )
# 源文件与目标定义
src = $(wildcard ./*.c)
object = $(patsubst %.c,%.o,$(src))
target = rjgt102# 交叉编译器配置(直接从环境变量中引用)
CC = aarch64-poky-linux-gcc# 目标系统根目录
SDKTARGETSYSROOT = /home/hugo/SDK/sysroots/aarch64-poky-linux# 编译选项
CFLAGS = -O2 -pipe -g -feliminate-unused-debug-types \-mcpu=cortex-a53+crc+crypto \-fstack-protector-strong \--sysroot=$(SDKTARGETSYSROOT) \-isystem $(SDKTARGETSYSROOT)/usr/include$(target): $(object)$(CC) -o $@ $^ $(CFLAGS)%.o: %.c$(CC) -o $@ -c $< $(CFLAGS).PHONY: clean
clean:rm -f $(target) $(object)
6. 编译

使能交叉编译工具链的环境变量:

source /home/hugo/SDK/environment-setup-aarch64-poky-linux

清理再编译:

make clean && make

结果:
在这里插入图片描述

6.1 如果报错,手动验证有没有头文件能不能找到:
# 检查 string.h 是否存在
ls $(SDKTARGETSYSROOT)/usr/include/string.h  # 应存在
# 检查编译器是否能找到该头文件
echo '#include <string.h>' | aarch64-poky-linux-gcc -E -xc - --sysroot=$(SDKTARGETSYSROOT) -isystem $(SDKTARGETSYSROOT)/usr/include
# 若无报错,则配置成功

在这里插入图片描述

7. 加密芯片执行

在这里插入图片描述
在这里插入图片描述

四、硬件看门狗

1.看原理图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.通过在设备树注册的方式,看看SET0 \ SET1 \SET2 接的GPIO引脚 对应的编号是多少

1.给对应的GPIO口进行注册
在这里插入图片描述
2.重新编译生成设备树dtb,在开发板上使用命令查看GPIO引脚对应的编号。

命令:

# 查看GPIO映射(需要内核启用DEBUG_FS)
cat /sys/kernel/debug/gpio

输出中会显示所有已注册的GPIO。
找到gpiochip3(对应GPIO4)的基地址,然后找到了我们自己在设备树给GPIO4_1 / GPIO4_0 / GPIO4_21配置的节点名字(set0 set1 set2 下面图是旧图是user-set2,不要紧),然后看到GPIO引脚对应的编号是96 97 117 。
在这里插入图片描述

3. 编写脚本去设置GPIO引脚的值(改变SET1 SET2 SET0的值)

把设备树dts文件里的看门狗代码注释掉。
使用GPIO对应的编号编写脚本watchdog.sh 去设置GPIO引脚的值(高低电平),通过设置GPIO引脚的值设置看门狗模式。

#!/bin/bash
# Copyright 2021 Tronlong Elec. Tech. Co. Ltd. All Rights Reserved.
# Description:
#   Watch dog test.## 这个脚本SET1和SET2的值固定是1,只改变SET0的值去设置10s或60s延时复位,有需要可以修改其它值
#################################################
## GPIO4_1    --> SET0           97           ##
## GPIO4_0    --> SET1           96           ##
## GPIO4_21    --> SET2          117          ##
#################################################readonly VERSION="1.0"
GPIO=""
SET0_PIN=97
SET1_PIN=96
SET2_PIN=117# Watchdog timeout
# 开始时默认是60s,set0,1,2的值都为1
# 1: 60s
# 用来保存看门狗超时时间,然后下面的代码会根据这个值来设置看门狗超时时间
s0_val=1
s1_val=1
s2_val=1# Help message.
# 用来打印帮助信息
usage() {echo "Usage: $1 <options> [-g gpio <-t timeout>]options:--gpio(-g)      Watch dog gpio number (e.g 124)--timeout(-t)   Watch dog timeout(unit: second, value: 10 or 60)--version(-v)   Print version.--help(-h)      Print this help message.e.g../watchdog.sh -g 124 -t 10"
}# Program entry function
# 程序入口函数
main() {#一、判断第一个参数case $1 in#1.如果第一个参数的值为--help或者-h,则打印帮助信息并退出,$0表示脚本名称./watchdog.sh--help | -h)                    usage $0                   exit 0;;#2.如果第一个参数的值为--gpio或者-g,则判断参数个数是否小于4,如果小于4则打印帮助信息并退出--gpio | -g)if [[ $# < 4 ]]; then       usage $0exit 0fi                          #如果参数个数大于等于4,则继续执行下面的代码GPIO=$2                     #将第二个参数赋值给GPIO变量,这个引脚用来喂狗的if [[ $3 != "--timeout" && $3 != "-t" ]]; then  #判断第三个参数是否为--timeout或者-t,如果不是则打印帮助信息并退出usage $0exit 0fi  if [[ $4 == 60 ]]; then     #判断第四个参数是否为10,如果是则将TIMEOUT变量赋值为0s2_val=1s1_val=1s0_val=1elif [[ $4 == 10 ]]; then   #判断第四个参数是否为60,如果是则将TIMEOUT变量赋值为1s2_val=1s1_val=1s0_val=0else                        #如果第四个参数既不是10也不是60,则打印帮助信息并退出usage $0exit 0fi;;#3.如果第一个参数的值为--version或者-v,则打印版本信息并退出--version | -v)echo "Version: ${VERSION}"exit 0;;*)usage $0exit 0;;esac  # case..esac结构#二、开始喂狗echo "Feeding the watch dog..."# 1.Configure watchdog 10 second timeout # 设置喂狗的模式(10s还是60s),导出SET0引脚,# 并设置为输出模式,根据TIMEOUT的值设置SET0引脚的值if [[ ! -d /sys/class/gpio/gpio${SET2_PIN} ]]; thenecho ${SET2_PIN} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${SET2_PIN}/directionecho $s2_val > /sys/class/gpio/gpio${SET2_PIN}/valueif [[ ! -d /sys/class/gpio/gpio${SET1_PIN} ]]; thenecho ${SET1_PIN} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${SET1_PIN}/directionecho $s1_val > /sys/class/gpio/gpio${SET1_PIN}/valueif [[ ! -d /sys/class/gpio/gpio${SET0_PIN} ]]; thenecho ${SET0_PIN} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${SET0_PIN}/directionecho $s0_val > /sys/class/gpio/gpio${SET0_PIN}/value# 2.Export WDI pin # 导出WDI引脚,并设置为输出模式,为下面喂狗做准备if [[ ! -d /sys/class/gpio/gpio${GPIO} ]]; thenecho ${GPIO} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${GPIO}/direction# Feed watch dog# 循环喂狗,循环去给WDI引脚赋值0和1while true; doecho 1 > /sys/class/gpio/gpio${GPIO}/valuesleep 1echo 0 > /sys/class/gpio/gpio${GPIO}/valuesleep 1echo "feeding..."done#三、如果程序执行到这里,说明上面循环退出了,表明程序异常退出了,需要重启系统echo "Feed the watch dog done!"
}#使用‘@` 可以将所有参数作为一个整体传递给函数或命令
#@表示将所有传递给脚本的参数转发给main` 函数
main $@

4. 执行硬件看门狗脚本程序

# 124是喂狗的GPIO编号
# 10是设置系统复位延时为10s
# &是放到后台去执行
./watchdog.sh -g 124 -t 10 
# 124是喂狗的GPIO编号
# 60是设置系统复位延时为60s
./watchdog.sh -g 124 -t 60 &

5.(另一种方法)将看门狗写到设备树里直接写死

可以像第2步一样,把(SET0 SET1 SET2)的 GPIO引脚的高低电平的值写死,固定就是那个延时时间进行复位。

五 、以太网

一个千兆网口、两个百兆网口(其中一个百兆网口是扩展的)。
百兆网口接在usb hub上,会自动识别。

六、USB有问题

七、HDMI

八 、4G模块 (还有两个模块没有调)

在设备树里使能4G的电源引脚(PCIE引脚,因为4G模块插在PCIE接口,然后通过协议转换芯片转的usb然后接在usb总线上)
在这里插入图片描述

九、wifi

8188(因为wifi模块硬件接触不良)

8811 (参考创龙官方提供的8188 Makeflie文件 去修改8811的Makefile文件)

1.根据创龙提供的指导文档,使用rtl8821cu.tar.gz源码包对评估板进行RTL8811 模块驱动适配,(因RTL8821CU驱动向下兼容RTL8811协议)。
将usb_wifi_test 的 src 目录下的 WIFI 驱动源码拷贝至/home/hugo/Demo/usb_wifi_test/src目录下

2.在环境方面,内核镜像和模块编译成功,打开Makefile配置交叉编译环境,指定IMX8平台、交叉编译链及内核源码路径。Makefile关键修改的参数如下:
指定目标平台:CONFIG_PLATFORM_FS_IMX8 = y
配置交叉编译链路径:CROSS_COMPILE = aarch64-poky-linux-
绑定内核源码路径:KSRC = /home/hugo/IMX8/Kernel/Linux-5.4.70
在这里插入图片描述
在这里插入图片描述

3.驱动编译‌:加载SDK环境变量并执行make命令,成功生成8821cu.ko(实际向下兼容8811)WIFI驱动文件。

hugo@hugo-virtual-machine:~/Demo/usb_wifi_test/src/rtl8821cu$ source /home/hugo/SDK/environment-setup-aarch64-poky-linux
hugo@hugo-virtual-machine:~/Demo/usb_wifi_test/src/rtl8821cu$ make

在这里插入图片描述

文件系统修改

1.系统主机名修改

修改制卡包里面的文件系统文件试试。看看重新制卡会不会变?

2.指示灯脚本

直接放后台运行就行

相关文章:

  • Vue3中provide和inject的用法示例
  • 第 4 期:DDPM中的损失函数——为什么只预测噪声?
  • 守护进程及gdb调试(新手简略版)
  • 数控铣床自动上下料机械手控制装置设计
  • python豆包语音合成并播放
  • keil5软件配置以及使用技巧
  • Aladdin显卡多任务运行教程
  • 大模型应用_AutoGPT
  • 软件测试之接口测试详解
  • Linux CentOS 更改MySQL数据库目录位置
  • 生态篇|多总线融合与网关设计
  • 函数与数组---------C语言经典题目(1)
  • Vue 3 计算属性与侦听器深度解析:优雅处理响应式数据
  • ​​Nginx快速入门-3:工作流程和模块化
  • day1-小白学习JAVA(mac版)---(jdk安装和环境变量配置)
  • 【Reading Notes】(8.2)Favorite Articles from 2025 February
  • ModbusTCP 转 Profinet 主站网关
  • 从零实现Git安装、使用
  • FairMOT与MCFairMOT算法对比
  • 【web服务_负载均衡Nginx】二、Nginx 核心技术之负载均衡与反向代理
  • 郑州卫健委通报郑飞医院“血液净化”问题:拟撤销该院血液净化技术备案
  • 商务部:中国加快推进服务业扩大开放综合试点为世界注入更多确定性
  • 《上海国际金融中心进一步提升跨境金融服务便利化行动方案》印发
  • 复旦大学史地学系在北碚
  • 新科世界冠军!雨果4比1战胜林诗栋,首夺世界杯男单冠军
  • 广东音像城清退,发烧友紧急“淘宝”,曾见证广州音乐黄金期