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

RK3568学习笔记

第1章 Linux镜像烧录

更新和烧录镜像方法

1.0 查看交叉编译工具

aarch64-linux-gnu-gcc --version

1.1 查看编译脚本选项

lubancat@lubancat-vm:~/LubanCat_SDK$ pwd
/home/lubancat/LubanCat_SDK
lubancat@lubancat-vm:~/LubanCat_SDK$ ./build.sh --help

1.2 选择目标板卡配置

./build.sh lunch

“lite” = 无桌面(轻量命令行系统)
“xfce” = 带桌面版
“xfce-full” = 桌面完整版(包含常用软件包)

目的命令示例说明
查看当前支持的开发板配置./build.sh lunch类似 Android 的 lunch,列出并选择板卡
构建 U-Boot./build.sh uboot编译 U-Boot 引导程序
构建 Kernel./build.sh kernel编译 Linux 内核
构建 RootFS(默认 buildroot)./build.sh rootfs编译根文件系统
构建完整系统镜像./build.sh all同时编译 uboot + kernel + rootfs
打包固件镜像./build.sh firmware将所有镜像文件打包成可烧录镜像
构建并保存所有镜像./build.sh allsave一键构建+打包+保存
清理全部编译结果./build.sh cleanall清理所有生成的镜像与中间文件

1.3 编译所有

# 1. 选择目标板卡配置
sudo ./build.sh lunch# 2. 编译所有组件
sudo ./build.sh all# 3. 打包固件
sudo ./build.sh firmware# 4.更新镜像
sudo ./build.sh updateimg

第2章 Linux模块化编程

第3章 Linux中断子系统

第4章 Linux并发与竞争

第5章 Linux字符设备驱动

5.1 ioctl函数

        根据经验,ioctl 通常用于传递 控制命令和少量数据,而 大量数据传输 则应使用 read/writemmap

5.1.1 ioctl函数框架

5.1.2 ioctl命令宏详解

(1) 命令格式

(2)生成命令的命令宏(应用层使用)

命令宏方向参数
_IO(type,nr)没有参数的命令
  • 设备类型,通常是一个字符(char),用于区分不同设备的命令,避免冲突。例如 'k''c''d' 等。
  • nr命令序号,一个整数(通常 0~15),表示该设备的第几个命令。
_IOR(type,nr,size)该命令是从驱动读取数据
  • type设备类型,通常是一个字符(char),用于区分不同设备的命令,避免冲突。例如 'k''c''d' 等。
  • nr命令序号,一个整数(通常 0~15),表示该设备的第几个命令。
  • size数据大小,传递的数据结构的字节数(sizeof(struct xxx))。
_IOW(type,nr,size) 该命令是应用向驱动写数据
  • type设备类型,通常是一个字符(char),用于区分不同设备的命令,避免冲突。例如 'k''c''d' 等。
  • nr命令序号,一个整数(通常 0~15),表示该设备的第几个命令。
  • size数据大小,传递的数据结构的字节数(sizeof(struct xxx))。
_IOWR(type,nr,size)双向数据传输
  • type设备类型,通常是一个字符(char),用于区分不同设备的命令,避免冲突。例如 'k''c''d' 等。
  • nr命令序号,一个整数(通常 0~15),表示该设备的第几个命令。
  • size数据大小,传递的数据结构的字节数(sizeof(struct xxx))。

(3)拆解命令的命令宏(驱动层使用)

1._IOC_TYPE(cmd) —— 从命令中提取设备类型(幻数)

  • 用途:提取命令中的 type 字段(也称“幻数”,magic number)。
  • 返回值:一个字符(char),用于标识设备或驱动类别。
  • 典型用法:防止不同设备的命令码冲突。驱动可通过此值验证命令是否属于本设备。
if (_IOC_TYPE(cmd) != 'k')return -ENOTTY; // 非本设备命令

2. _IOC_DIR(cmd) —— 从命令中提取方向

  • 用途:提取 ioctl 命令的数据传输方向。
  • 返回值:一个整数,表示数据流向,可能为:
    • _IOC_NONE:无数据传输
    • _IOC_WRITE:用户空间 → 内核空间(写)
    • _IOC_READ:内核空间 → 用户空间(读)
    • _IOC_READ | _IOC_WRITE:双向传输
  • 典型用法:驱动中判断是否需要读/写用户缓冲区,进行权限检查。
if (_IOC_DIR(cmd) & _IOC_READ)access_ok(VERIFY_WRITE, arg, _IOC_SIZE(cmd));

3._IOC_NR(cmd) —— 从命令中提取命令序号

  • 用途:提取命令的编号(nr),即该设备下的第几个命令。
  • 返回值:一个整数(0~255),表示命令的序号。
  • 目的:在驱动的 switch 语句中用于分发不同的命令处理逻辑。
switch (_IOC_NR(cmd)) {
case 0:// 处理 RESET 命令break;
case 1:// 处理 GET_STATUS 命令break;
}

4._IOC_SIZE(cmd) —— 从命令中提取数据大小

  • 用途:提取命令中指定的数据结构大小(以字节为单位)。
  • 返回值:一个整数,表示 size 参数的值(即 sizeof(struct xxx))。
  • 目的:用于验证用户传入的缓冲区大小是否合法,配合 copy_to_user / copy_from_user 使用。
if (_IOC_SIZE(cmd) > sizeof(local_struct))return -EINVAL;

5.总结

用途典型用途
_IOC_DIR(cmd)提取数据传输方向判断是读、写还是双向
_IOC_TYPE(cmd)提取设备类型(幻数)验证命令是否属于本设备
_IOC_NR(cmd)提取命令序号switch 分发具体操作
_IOC_SIZE(cmd)提取数据大小缓冲区边界检查、内存操作

第xxx章 Platform虚拟总线

第xxx章 设备树

参考文章

第xxx章 Linux设备驱动模型

第xxx章 GPIO子系统

第xxx章 I2C子系统

第xxx章 SPI子系统

第xxx章 UART子系统

http://www.dtcms.com/a/504978.html

相关文章:

  • 大规模网站开发语言微信小程序可以自己开发吗
  • wordpress 导出用户天津seo网络营销
  • 【数据结构与算法基础】05. 栈详解(C++ 实战)
  • 做网站要有什么团队雨发建设集团有限公司网站
  • seo建站优化asp.net+mvc+网站开发
  • 网站图片一般分辨率做多大赣州网站建设服务
  • 2017招远网站建设云兰装潢公司总部地址电话
  • 网站服务器查询工具wordpress 返回顶部插件
  • 做网站推广弊端青岛胶南做网站的
  • 2018年网站建设工作总结北京市建设工程信息网登录流程
  • 网站首页背景代码旅游类网站开发毕业设计
  • 9 垂直分片
  • 公司网站如何备案如何制作钓鱼网站
  • 做网站如何分类关于网站建设的外文翻译
  • 网站建设申请书搜了网推广
  • 昆明做网站建设有哪些网站推广优化联系方式
  • 免费注册自己的网站品牌建设卓有成效
  • 易语言和网站做交互中国赣州
  • 网站网页设计制作公司搬家网站建设案例说明
  • STM32Cubemx配置独立看门狗(IWDG)
  • 有做翻译英文网站山西网站开发二次开发
  • 外贸业务怎么利用网站开发客户网站建设模板网站
  • 免费的企业网站建设wordpress做漫画
  • 网站域名查询网网站推广的方法搜索引擎
  • 给外国小孩 做 英语题用的网站怎么做文学动漫网站
  • 网站制作网页设计室内设计软件3d
  • 北京专业制作网站公司哪家好贵南网站建设
  • 浙江人工智能建站系统软件网站页脚写什么
  • 公司网站怎么更新需要怎么做优化关键词哪家好
  • 简单的企业网站外贸网站广告宣传网站