- 博客(17)
- 资源 (1)
- 收藏
- 关注
转载 软中断 简介
在SMP(对称多处理器)系统中,中断下半部的“串行化”执行没有充分利用SMP的多CPU特性。因此,Linux Kernel 2.4扩展了softirq(软中断请求)的机制。
2022-11-20 10:30:22
1041
原创 Jetson - eMMC启动流程
Jetson - eMMC启动流程sdio扫描drivers/mmc/host/sdhci-tegra.cstatic int sdhci_tegra_probe(struct platform_device *pdev){ ... ... host = sdhci_pltfm_init(pdev, soc_data->pdata, sizeof(*tegra_host)); ... ...}drivers/mmc/
2022-10-03 09:21:24
534
原创 Linux - 网络路由
Linux - 网络路由原理流程图判断逻辑重置路由配置文件 由于公司产品可同时支持4G/5G、WiFi、GigE等多路网络接口。实际使用环境,通常固定1路接入外网,而其余接口接入内网或设置静态IP(4G/5G只能接入外网)。Linux路由优先级默认eth>wlan>usb,如果4G接入外网,同时wifi和eth的路由无法连接外网,系统请求外网连接时,可能将数据包发送到eth或wifi导致连接失败。 因此需要设计路由守护服务,定制与维护系统的路由表。原理 详见linux路由策略和路由
2021-12-07 23:46:31
563
原创 Linux - 拨号上网
Linux - 拨号上网基础知识AT指令流程图配置文件 Linux自带移动网络拨号软件:ModemManager。但是工作中遇到使用的4G模块不在ModemManager支持列表中,需要设计拨号服务取代ModemManager。 USB接口(4G-USB2.0;5G-USB3.0)的移动网络模块,可以通过dev/ttyUSB*(option和usb_wwan驱动创建)端口与系统进行AT指令通信。基础知识AT指令 模块的AT指令一般分公有接口和私有接口(华为MH5000为例):流程图配
2021-12-07 23:25:08
1861
2
原创 CAN - spi扩展can方案
spi扩展can方案CPURXTX异常MCUGPIOSPI指令MemoryRegisters配置寄存器中断状态寄存器错误诊断寄存器fifo控制和状态寄存器filter配置和控制寄存器FIFOsRAM结构消息对象 mcu扩展can的优点:mcu可编程,灵活控制扩展的can数量和功能mcu通信最少只需要1路spi和1路gpio,占用cpu硬件资源少 参照mcp2517fd芯片,设计spi扩展8路can方案:CPURX 注:待处理的RX FIFO地址(编号)必须是连续的。TX异常
2021-12-05 23:42:58
2226
原创 CAN总线 - 扫盲
can总线can是什么can的作用can的优点can总线拓扑can控制器can收发器物理层特性终端电阻can的特点多主控制消息发送通信速度远程数据请求错误故障封闭连接节点多速度快,距离远can总线错误主动错误状态被动错误状态总线关闭状态状态转换错误计数can协议模型标准规格ISO标准面向汽车的协议分类can帧协议帧(can2.0)数据帧远程帧错误帧过载帧帧间隔帧(can fd)仲裁位填充错误错误的种类错误帧输出位时序硬件同步再同步调整同步的规则can是什么 CAN是Controller Area Ne
2021-12-02 17:06:10
2186
原创 WK2204 - spi转uart调试记录
WK2204-spi转uart调试记录硬件芯片简介电路设计驱动添加设备树添加驱动调试查看启动加载检查串口通信数据乱码或丢失RS485只能收不能发系统中断响应异常思考硬件芯片简介 WK2204(DataSheet)是spi扩展uart的芯片,实现spi扩展4路uart,该芯片扩展的uart通道的具备以下功能特点:每个通道的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps 的通信速率每个通道具有收/发独立的256 级FIFO,FIFO 中断可按用户需求进行编程触发方式且具备超时中断功能
2021-11-29 01:06:22
8860
原创 Linux音频调试示例
Linux音频调试示例硬件设计设备树在i2c节点添加设备使能i2s总线添加dai_link修改pinmux驱动code驱动platform驱动machine驱动激活音频流播放录音问题定位声卡未识别录音/播放失败检查codec寄存器值检查音频流的trace硬件设计cpucodecperipheral interfacenvidia-jetsonmax9867line-in×1, hp×1 codec与cpu之间通过i2c读写寄存器,i2s传输音频信号(i2s总线简介)。
2021-11-25 17:06:56
2767
4
原创 Linux内核栈调试
Linux内核栈调试dump_stack现象原因分析oops信息寄存器信息应用层信息调用栈关系objdump反汇编内核编译反汇编命令分析 Linux内核驱动调试经常遇到定位困难的问题,除了在代码之间添加log(printk/dev_info等)以外,还可以借助栈(stack)信息定位到代码。dump_stack现象原因 内核打印栈信息的常见原因有:oops崩溃:常见问题有空指针、内存访问越界等dump_stack函数:需要头文件linux/kprobes.h和asm/traps.h
2021-11-21 15:59:22
2575
原创 Linux内核锁
Linux内核锁spinlock单CPU系统多CPU系统semaphoremutex理解spinlock单CPU系统 include/linux/spinlock_api_up.h#define __LOCK(lock) \ do { preempt_disable(); ___LOCK(lock); } while (0) #define __UNLOCK(lock) \ do { preempt_enable(); ___UNLOCK(lock); } while (0)多CPU
2021-11-21 01:32:27
474
原创 Linux内核/设备树version
Linux内核/设备树version背景内核版本ContentsKernelMakefileShow设备树版本DTSKernelVersionShow背景 Linux内核版本可以在/proc/version中查看。 但是设备树默认没有版本信息,虽然可以通过demsg查到编译时间。 在工作中,希望:内核版本中添加产品型号、硬件版本、内核定制版本等信息。设备树与内核的版本绑定,通过/proc/dtb查看。内核版本Contents● product_version:产品型号● har
2021-11-21 00:55:46
1368
原创 Linux内核日志分级
Linux内核日志分级内核printk分级定义使用设置自定义printk分级定义接口使用设置内核printk分级定义 内核代码source/kernel_src/kernel/kernel-4.9/include/linux/kernel.h中,定义了控制台console的级别:#define CONSOLE_LOGLEVEL_SILENT 0 /* Mum's the word */#define CONSOLE_LOGLEVEL_MIN 1 /* Minimum loglevel
2021-11-20 23:44:25
470
原创 Linux音频子系统
Linux音频子系统硬件基础ALSA简介包含框架代码结构数据流向目录ALSA核心层作用字符设备ASoC框架硬件架构软件架构数据结构TODO硬件基础 传统音频电路包含麦克风、前置放大器、模数转换器ADC、数模转换器DAC、输出放大器、扬声器,如图所示:ALSA简介包含内核驱动 alsa-driver用户空间开发包 alsa-libs开发包插件 alsa-plugins设置管理工具包 alsa-utils声音处理小程序包 alsa-tools特殊音频固件支持包 alsa-firm
2021-11-17 22:28:41
1310
原创 Systemd使用
systemd使用启动顺序依赖关系启动顺序 systemd-analyze plot > order.svg 浏览器打开svg文件,显示service启动顺序,如图所示:依赖关系 systemctl list-dependencies <service-name>.service 显示服务的全部依赖关系,如图所示:...
2021-11-17 16:44:31
112
原创 Linux网络机制 - NAPI
背景 外部设备与中央处理器交互一般有两种手段:轮询和中断。 ● 中断看似很高效,但是却会遗漏一些数据,避免遗漏的机制要么由硬件实现要么由上层的软件实现。 ● 轮询没有中断高效,会做很多徒劳的操作,而且必须引入暂存机制,由于cpu不可能每次查询硬件的时候正好有事情可做,但轮询不会遗漏请求。 当外部设备活跃时,频繁的中断会导致大量的CPU开销,此时最好用轮询,但是外设活动很缓和的时候,轮询将会浪费CPU资源。机制 NAPI是中断和轮询的结合,数据量低时采用中断,数据量高时采用轮询。Cre
2021-11-17 12:18:51
278
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人