[linux kernel]内核启动阶段控制IO口时序输出

本文详细介绍了在Linux系统启动阶段如何控制IO口的时序输出,特别是在特定应用场景,如4G模块的RST和ON/OFF信号控制。针对Ubuntu 18.04和sama5d36 MCU,通过修改内核驱动和uboot,实现对at91平台的初始化函数sama5.c中的sama5_pm_init()进行调整,完成GPIO的初始化操作。同时,文章还提及了Linux内核移植、驱动调试和u-boot的相关知识。
摘要由CSDN通过智能技术生成

系统版本:Ubuntu18.04-64

编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)

uboot版本:2018.07 -linux4sam_6.0

板子型号:at91sama5d3x-xplained

MCU型号:sama5d36
在一些特殊应用场景,在板子上电启动阶段就需要优先给IO进行上电,甚至是按照时序输出 ;比如:以前去广东电科院送检,有个检测项是4G模块在上电阶段,就要有RST信号出现1S低脉冲,然后ON/OFF信号200ms低脉冲,为了让4G模块和系统同步进入运行状态;就这么一个不起眼的操作,用单片机系统的厂家很快就解决了,我们使用Linux系统的搞起来有点繁琐,修改uboot,修改内核启动流程的代码。

linux开发相比单片机的主要难度就是无法在线仿真,调试手段打印,或者测量外部电平的变化。

一、查找到芯片初始化代码,理论上初始化完CPU时钟,DDR时钟之后就可以进行外围寄存器操作了;
1.1 调试内核驱动首先要了解芯片是属于哪个平台架构,atmel这款芯片mach-at91;其次就是开发板型号,参考官网开发板,这样可以少做很多无用功。

在这里插入图片描述

mach-at91下面有很多不同cpu型号的加载文件,每个里面都有初始化函数,该从哪里选择呢?

在这里插入图片描述

首先查看Makefile文件,可以看到里面有很多宏,要是不知道目前是哪个宏生效,可以先编译一次,然后查看这个目录下面有哪些文件编译出了.o文件,就可以说明是哪个宏生效了,我们要修改的是sama5.c;

二、进入sama5.c中查看对应的代码

//初始化函数
static void __init sama5_dt_device_init(void)
{
   
    of_platform_default_populate(NULL, NULL, NULL);
    sama5_pm_init();
}

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值