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

做网站的参考文献有哪些海洋公司做网站推广

做网站的参考文献有哪些,海洋公司做网站推广,免费 wordpress,郑州做网站哪个公司好目录 Petalinux驱动开发以及代码框架解读一、引言二、步骤2.1 创建PetaLinux工程2.2 配置硬件描述文件2.3 设备树配置2.4 建立驱动框架2.5 编辑 .bb 文件2.6 编写驱动文件2.7 编写 Makefile2.8 验证配方配置2.9 集成驱动到 RootFS2.10 全系统编译与部署2.11 启动验证 三、框架解… 目录 Petalinux驱动开发以及代码框架解读一、引言二、步骤2.1 创建PetaLinux工程2.2 配置硬件描述文件2.3 设备树配置2.4 建立驱动框架2.5 编辑 .bb 文件2.6 编写驱动文件2.7 编写 Makefile2.8 验证配方配置2.9 集成驱动到 RootFS2.10 全系统编译与部署2.11 启动验证 三、框架解读3.1 模块基本信息3.2 模块参数3.3 数据结构customGpioExport_local3.4 中断处理函数3.5 Probe函数设备初始化**功能****流程** 3.5 Remove函数资源释放3.7 设备树匹配3.8 平台驱动结构体3.9 模块初始化和退出3.10 代码执行流程3.11 潜在改进点 四、结语 Petalinux驱动开发以及代码框架解读 一、引言 Petalinux是Xilinx提供的Linux开发工具链。通过Petalinux可以很轻松的完成Xilinx SOC的Linux系统定制驱动和应用开发。本文主要从驱动开发角度基于petalinux2022.2版本介绍如何同通过Petalinux开发自己的驱动。 二、步骤 安装Petalinux以及使用Vivado创建SOC工程这些基础步骤网上由太多教程这里就不累述了。这里假设大家已经安装好了VivadoPetalinux并已经通过Vivado工程导出了硬件描述文件.xsa文件。 2.1 创建PetaLinux工程 petalinux-create -t project --name zynq_gpio_demo --template zynq cd zynq_gpio_demo2.2 配置硬件描述文件 将Vivado生成的system.xsa文件复制到工程目录。导入硬件配置petalinux-config --get-hw-description.2.3 设备树配置 在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi中添加GPIO节点 / {custom_gpios {compatible customGpioExport;status okay;gpios gpio0 54 GPIO_ACTIVE_HIGH, // EMIO GPIO0gpio0 55 GPIO_ACTIVE_HIGH; // EMIO GPIO1}; };关键属性 compatible驱动匹配标识符。gpios指定GPIO控制器、引脚号和激活电平。 2.4 建立驱动框架 petalinux为用户开发自己的驱动建立了完整易用的驱动框架可以通过petalinux-create -t modules命令创建如下所示 petalinux-create -t modules --name customGpioExport --enable通过上述指令就会在{petalinux project}/project-spec/meta-user/recipes-modules/目录下生成custom_gpio_export 目录在该目录下自动生成了custom_gpio_export .bb文件以及files文件加在files文件夹下成了驱动框架文件customGpioExport .c以及Makefile以下是目录结构图 {petalinux project}/ └── project-spec/└── meta-user/└── recipes-modules/└── customGpioExport/├── customGpioExport.bb└── files/├── customGpioExport.c└── Makefile2.5 编辑 .bb 文件 打开{petalinux project}/project-spec/meta-user/recipes-modules/customGpioExport下的customGpioExport.bb文件并修改内容如下 # 配方基础配置 SUMMARY Custom GPIO Export Driver LICENSE GPL-2.0-only LIC_FILES_CHKSUM file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5801f80980d171dd6425610833a22dbe6# 定义模块名称和源码路径 MODULE_NAME customGpioExport SRC_URI \file://${MODULE_NAME}.c \file://Makefile \ # 指定源码目录默认为当前目录 S ${WORKDIR}# 继承内核模块构建类 inherit module# 定义模块编译参数 EXTRA_OEMAKE:append \KERNEL_SRC${STAGING_KERNEL_DIR} \KERNEL_VERSION${KERNEL_VERSION} \ # 安装目标将模块复制到 rootfs 的 /lib/modules/ 目录 do_install() {install -d ${D}/lib/modules/${KERNEL_VERSION}/extrainstall -m 0644 ${B}/${MODULE_NAME}.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/ }# 定义模块依赖可选 # DEPENDS virtual/kernel关键配置解释 SRC_URI 指定驱动源码路径。此处假设源码文件为 customGpioExport.c 和 Makefile位于 files 子目录。 若源码文件名为 customGpioExport.c需同步修改 SRC_URI \file://customGpioExport.c \file://Makefile \inherit module 继承内核模块构建类自动处理模块编译和签名如需 Secure Boot。 EXTRA_OEMAKE 向 make 命令传递额外参数 KERNEL_SRC指向内核源码目录。KERNEL_VERSION内核版本号自动填充。 do_install 定义模块安装逻辑将生成的 .ko 文件复制到 rootfs 的 /lib/modules/$(uname -r)/extra/ 目录。 2.6 编写驱动文件 根据自己需要以customGpioExport.c为基础框架增加自己模块需要的功能实现即可不在这里累述。 2.7 编写 Makefile 确保 files/Makefile 内容如下适配内核模块编译 obj-m : custom_gpio_export.oKERNEL_SRC ? /lib/modules/$(shell uname -r)/build PWD : $(shell pwd)all:$(MAKE) -C $(KERNEL_SRC) M$(PWD) modulesclean:$(MAKE) -C $(KERNEL_SRC) M$(PWD) clean注意 obj-m 后的目标名必须与 .c 文件名一致例如 customGpioExport.c → customGpioExport.o。若源码文件名为 customGpioExport.c需修改为obj-m : customGpioExport.o customGpioExport-objs : customGpioExport.o2.8 验证配方配置 执行以下命令检查语法和路径 # 进入 PetaLinux 工程根目录 cd zynq_gpio_demo# 运行 BitBake 解析配方 petalinux-build -c customGpioExport --force预期输出 若配置正确将输出编译日志并在 build/tmp/work/.../customGpioExport/ 下生成 .ko 文件。 常见错误 文件未找到检查 SRC_URI 和 files/ 目录中的文件名是否一致。编译错误查看 build/tmp/work/.../temp/log.do_compile 中的详细日志。 2.9 集成驱动到 RootFS 在 petalinux-config 中启用模块自动加载 petalinux-config -c rootfs进入菜单 Filesystem Packages ---module ---customGpioExport ---[*] customGpioExport2.10 全系统编译与部署 petalinux-build petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --u-boot2.11 启动验证 系统启动后检查模块加载 # 查看模块是否加载 lsmod | grep customGpioExport# 手动加载若未自动加载 modprobe customGpioExport# 检查 GPIO 导出状态 ls /sys/class/gpio/三、框架解读 3.1 模块基本信息 代码开头通过宏定义了模块的基本信息 MODULE_LICENSE(“GPL”)声明模块遵循GPL协议。MODULE_AUTHOR和MODULE_DESCRIPTION提供作者和模块描述。MODULE_DEVICE_TABLE(of, …)用于与设备树中的节点匹配后文详述。 3.2 模块参数 通过module_param定义了两个模块参数 unsigned myint 0xdeadbeef; char *mystr default; module_param(myint, int, S_IRUGO); // 整型参数 module_param(mystr, charp, S_IRUGO); // 字符串参数这些参数可在加载模块时通过命令行指定例如insmod customGpioExport.ko myint1234 mystrhello参数权限为S_IRUGO表示用户空间可读但不可写。 3.3 数据结构customGpioExport_local struct customGpioExport_local {int irq; // 中断号unsigned long mem_start; // 内存起始地址unsigned long mem_end; // 内存结束地址void __iomem *base_addr; // 映射后的虚拟地址 };该结构体保存设备的硬件资源信息如中断号、寄存器物理地址及其映射后的虚拟地址。 3.4 中断处理函数 static irqreturn_t customGpioExport_irq(int irq, void *lp) {printk(customGpioExport interrupt\n);return IRQ_HANDLED; }当设备触发中断时此函数被调用。当前仅打印一条日志实际应用中需添加具体的中断处理逻辑如读取状态寄存器、处理数据等。注意request_irq的第三个参数标志位为0未指定触发方式如上升沿或电平触发可能需要根据硬件需求调整。 3.5 Probe函数设备初始化 static int customGpioExport_probe(struct platform_device *pdev)功能 在设备树匹配到驱动时调用负责初始化设备资源内存、中断等。 流程 获取内存资源 r_mem platform_get_resource(pdev, IORESOURCE_MEM, 0);从设备树中获取寄存器内存范围mem_start和mem_end。 分配结构体内存 lp kmalloc(sizeof(struct customGpioExport_local), GFP_KERNEL);为customGpioExport_local分配内存保存设备信息。 请求内存区域 request_mem_region(lp-mem_start, ...);锁定物理内存区域防止其他驱动占用。 内存映射 lp-base_addr ioremap(lp-mem_start, ...);将物理地址映射为内核虚拟地址后续可通过iowrite32/ioread32等函数访问寄存器。 获取中断资源 r_irq platform_get_resource(pdev, IORESOURCE_IRQ, 0);若设备树中定义了中断注册中断处理函数request_irq(lp-irq, customGpioExport_irq, 0, ...);错误处理 若某步骤失败依次释放已申请的资源如release_mem_region、iounmap、kfree等。 3.5 Remove函数资源释放 static int customGpioExport_remove(struct platform_device *pdev)在模块卸载或设备移除时调用。释放所有资源中断、虚拟地址映射、内存区域及结构体内存。 3.7 设备树匹配 static struct of_device_id customGpioExport_of_match[] {{ .compatible vendor,customGpioExport, },{ /* end of list */ }, };通过compatible属性与设备树中的节点匹配。例如设备树中需包含customGpioExport0x12340000 {compatible vendor,customGpioExport;reg 0x12340000 0x1000;interrupts 0 29 4; };3.8 平台驱动结构体 static struct platform_driver customGpioExport_driver {.driver {.name DRIVER_NAME,.of_match_table customGpioExport_of_match,},.probe customGpioExport_probe,.remove customGpioExport_remove, };定义平台驱动的名称、设备树匹配表、Probe和Remove函数。 3.9 模块初始化和退出 初始化 static int __init customGpioExport_init(void) {platform_driver_register(customGpioExport_driver);printk(Hello module world.\n); }注册平台驱动并打印初始化信息。 退出 static void __exit customGpioExport_exit(void) {platform_driver_unregister(customGpioExport_driver);printk(Goodbye module world.\n); }注销驱动并清理资源。 3.10 代码执行流程 模块加载 执行customGpioExport_init注册平台驱动。内核扫描设备树若找到匹配的compatible节点调用customGpioExport_probe初始化设备。 设备初始化 申请内存、映射地址、注册中断如有。 模块卸载 执行customGpioExport_exit注销驱动并调用customGpioExport_remove释放资源。 3.11 潜在改进点 中断标志位request_irq未指定触发方式如IRQF_TRIGGER_RISING需根据硬件配置。GPIO功能当前代码未实现GPIO的导出或操作逻辑需补充gpio_request、gpio_direction_output等函数。模块参数应用myint和mystr未被使用可扩展为配置参数如设置GPIO初始状态。 总结 此代码是一个典型的内核模块框架实现了设备树匹配、资源管理、中断处理等基础功能但具体功能如GPIO操作需进一步扩展。开发者可根据实际需求在Probe函数中添加硬件初始化代码并在中断处理函数中实现业务逻辑。 四、结语 在petalinux框架下完成linux驱动开发门槛大大降低效率提高不少希望这篇文章能够抛砖引玉对大家有所帮助。 研究学习不易点赞易。 工作生活不易收藏易点收藏不迷茫
http://www.zqtcl.cn/news/845757/

相关文章:

  • 淘宝客如何做自己的网站西宁工程建设招聘信息网站
  • 天津都有哪些制作网站郑州官网首页
  • 个人网站开发模式海南省建设公司官网
  • edu网站开发做爰视频在线观看免费网站
  • 安防公司网站模板网站建设模板下载
  • 贵阳网站建设方案维护一 建设茶叶网站前的市场分析
  • 山东东营建设网官方网站百度电脑版
  • 做网站前途如何海尔网站建设推广
  • 投资公司网站建设万网域名安装wordpress
  • 高端网站建设企业官网建设wordpress相似推荐
  • php网站开发师招聘wordpress怎么换头像
  • 门禁考勤网站建设广西建设
  • 互助盘网站怎么做的织梦免费企业网站
  • 做羊毛毡的网站电子商务网站建设品牌
  • 用vue做商城网站常用的js教做发型的网站
  • 江西省寻乌县建设局网站广州网站建设一般多少钱
  • 做网站公司郑州郑州的网站建设公司哪家好网站开发word
  • 网页转向功能网站wordpress搭建小说站
  • 北京华夏建设有限公司网站wordpress建站安全吗
  • 怎样做电子商务网站直接通过ip访问网站
  • 白沟17网站一起做网店有啥方法下载wordpress主题
  • 找人做网站毕业设计用于做网站头的图片
  • 黄埔做网站江西省建设工程造价管理局网站
  • 适合网站开发的框架网盘视频直接做网站
  • wordpress菜谱网站网站服务公司
  • 跳转网站代码互联网平台构建怎么写
  • 服务器网站建设维护uemo网站源码
  • 浏览器如何做购物网站百度快照提交入口
  • 网站建设的主要步骤有哪些金华网站建设平台
  • 扁平化网站布局稷山网站制作