1-Linux系统基本操作
一.linux内核1.啥是内核 内核约等于操作寄存器,但是内核不能被用户直接操作,而是要通过调用 2.内核下载 谁都能用内核源码封装一个操作系统 3.远程连接finalshell ->ssh ->ip地址 wsl 二.基础命令 1.基本命令ls默认打开home ls -ahl / cd默认进去home目录 注意相对绝对路径 可以使用特殊路径符 pwd(print work directory)查看当前目录 mkdir(make directory)新建目录 mkdir -p 路径 一次性创建多层目录 注:在home下做命令是可以不考虑权限 2.文件操作命令touch创建文件 cat查看文件内容 more查看文件内容,支持翻页比cat更牛逼,可查看内容多的文档 空格翻页 cp复制文件 cp -r...
Linux驱动开发-概述
Linux驱动开发Linux驱动如何学习和理解,借用大神总结的话,在此记录下,我初次看时感觉很受用,理解的很到位: 上层是文件系统和应用,中层是Linux内核,下层是底层硬件,Linux驱动是介于文件系统和底层硬件之间的,是嵌入到内核中的程序,应用是嵌入到文件系统中的程序,比如Android APP。 对上:Linux设备驱动给上层提供调用的接口; 对中:Linux设备驱动要注册到内核中,标准说法是 挂载在总线上; 对下:直接操作硬件,如GPIO、IIC、SPI、PWM等; 以上三个,Linux内核都提供了大量的接口函数、结构体,其实Linux驱动,就是掌握了这些东西怎么用,适应到自己要写的驱动程序中。 Linux代码风格Linux 内核中处处体现面向对象的设计思想,为了统一形形色色的设备,Linux 系统将设备分别抽象为struct cdev, struct、block_device,struct net_devce...
2-驱动开发知识构建
...
Linux驱动开发-概述
知识体系构建Linux驱动开发├── 驱动基础│ ├── 内核模块(加载/卸载)│ ├── 字符设备(file_operations)│ └── 设备号管理(主/次设备号)├── 硬件交互│ ├── 设备树(语法、绑定)│ ├── I2C子系统(设备树、驱动)│ ├── SPI子系统(数据传输)│ └── GPIO控制(中断、方向)├── 内核机制│ ├── 中断处理(顶/底半部)│ ├── 同步机制(锁、信号量)│ └── 内存管理(DMA、kmalloc)├── 高级框架│ ├── IIO(传感器驱动)│ ├── Input子系统(事件上报)│ └── PWM(脉宽调制)├── 调试与优化│ ├── 工具链(dmesg, i2c-tools)│ ├── 性能优化(DMA、中断合并)│ └── 用户态接口(sysfs、ioctl)└── 开发流程├── 硬件分析 → 设备树 → 驱动开发 → 测试验证└──...
3-第一个驱动开发
not helloworld ,hellomodulexiandao 1.大致流程可以总结如下:• 实现入口函数xxx_init() 和卸载函数xxx_exit()• 申请设备号register_chrdev_region()• 初始化字符设备,cdev_init 函数、cdev_add 函数• 硬件初始化,如时钟寄存器配置使能,GPIO 设置为输入输出模式等。• 构建file_operation 结构体内容,实现硬件各个相关的操作• 在终端上使用mknod 根据设备号来进行创建设备文件(节点) 或者自动创建(驱动使用class_create 创建设备类、在类的下面device_create 创建设备节点) 2.但我们会发现一个问题简单的驱动会将所有的硬件信息放在代码中,如果修改驱动或二次开发会遇到问题代码重复修改麻烦,所以提出设备驱动模型分层的概念——驱动代码分成设备与驱动,设备负责提供硬件资源而驱动代码负责去使用这些设备提供的硬件资源,并由总线将它们联系起来。 • 设备(device) :挂载在某个总线的物理设备;• 驱动(driver)...
4-内核模块传参与符号共享
2 内核模块传参与符号共享 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889/* * @Author: Fanxiaominghang 2309200691@qq.com * @Date: 2025-02-06 16:11:36 * @LastEditors: Fanxiaominghang 2309200691@qq.com * @LastEditTime: 2025-02-06 22:37:29 * @FilePath: /nose/study/hello.c * @Description: */#include<linux/module.h>#include<linux/moduleparam.h>#define CNT 1static int...