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

数字资产交易网站开发自己建网站做代理商

数字资产交易网站开发,自己建网站做代理商,成都网站建设q479185700棒,青海建设厅网站尚少岩背景 问题 前段时间开发一个tty驱动,用途是实现仪器对GPIB消息的接收、处理和上报。对于上报场景,下位机应用将上报内容写入一个驱动创建的tty设备,tty子系统将应用的输入转发给tty驱动,tty驱动将其转换成对SPI从设备&#xff0…

背景

问题

前段时间开发一个tty驱动,用途是实现仪器对GPIB消息的接收、处理和上报。对于上报场景,下位机应用将上报内容写入一个驱动创建的tty设备,tty子系统将应用的输入转发给tty驱动,tty驱动将其转换成对SPI从设备(即GPIB扩展板)的写入,SPI从设备再将收到的SPI消息转换成GPIB消息发送给上位机
GPIB拓扑

实现tty_operationswrite接口时,我是这么获取驱动上下文的:

struct gpib_tty_ctx {struct tty_port port;struct tty_struct mgr;  // 其实是无效的成员struct tty_driver *tty_drv;struct spi_device *spi_dev;struct gpib_spi_ctx *spi_ctx;struct mutex tty_lock;u32 activated:1;const u8 *pend_tx_buf;u32 pend_tx_len;
};static int gpib_tty_write(struct tty_struct * tty, const unsigned char *buf, int count)
{struct gpib_tty_ctx *ctx = container_of(tty, struct gpib_tty_ctx, mgr);// 通过ctx指针访问上下文结构体gpib_tty_ctx的驱动私有字段,完成write功能return count;
}

但是实际执行的时候,触发了空指针异常,且空指针的值并不是0x0这种典型值,而是带一点偏移。

问题定位

经定位,是我对tty子系统的理解有问题,write方法的第一个入参tty,并不是gpib_tty_ctxstruct tty_struct mgr成员的地址,而是tty子系统在运行时自动创建的一个匿名tty_struct对象的地址!因此我用container_of宏获取到的gpib_tty_ctx对象地址也是一个无效地址!

解决

注意到tty_struct结构体包含一个类型为struct tty_port的指针port

struct tty_struct {struct kref kref;int index;struct device *dev;struct tty_driver *driver;struct tty_port *port;   // 指向用户驱动创建并初始化的tty_port对象const struct tty_operations *ops;struct tty_ldisc *ldisc;struct ld_semaphore ldisc_sem;// ...
};

它应该就是指向驱动之前创建并初始化的gpib_tty_ctx.port对象,这个对象本身是没有被复制的,因此我可以将这个指针传递给container_of宏:

struct gpib_tty_ctx *ctx = container_of(tty->port, struct gpib_tty_ctx, port);

经测试,新的container_of宏返回了正确的驱动上下文地址。

总结

  1. tty_struct指针类似于file_operations接口的open方法的输出参数file指针,都对应内核自动分配的一个对象,其地址是不可以用于container_of宏的,但是它的成员private_data可以用于container_of宏,因为后者的值是驱动填写的。
  2. container_of宏的第一个参数是结构体成员地址,这个结构体成员一般是个对象,不建议选地址类成员,因为如果是地址,则该成员很可能是复制过的,那么你通过给container_of宏提供二级指针(指针成员的地址就是二级指针)获取的ctx对象,很可能是错的。
http://www.yayakq.cn/news/297728/

相关文章:

  • 阿里云cdn wordpress四川网站营销seo费用
  • 内蒙网站建设seo优化wordpress模板怎么改织梦
  • 宁波做360网站推广四川公众项目咨询管理有限公司
  • 天津培训网站建设江西宣传片制作公司
  • 做一个个人网站的步骤企业网站的主要内容
  • 嘉兴网站公司哪家好巨量千川广告投放平台
  • 罗湖做网站的公司哪家好电商网站建设的关键
  • wordpress 图片比例百度网站优化方案
  • jsp获取网站域名网站怎么建设微信支付宝支付功能
  • 网站建设公司排名前十网站开发自适应不同分辨率
  • 天津个人网站备案查询集美网站开发
  • 赣州高端网站开发网站建设的毕设报告
  • 徐州丰县建设局网站查企业网站
  • .net网站程序北京网站报价
  • 一个dede管理两个网站正能量网站入口免费安全
  • 用ps做网站的临摹哪个网站有做兼职的
  • 有趣网站之家免费下载网站设计方案
  • 规划网站站点需要遵循哪些原则房地产公司
  • 河北省建设环境备案网站html商业网站模板
  • 电子商务网站模板 html佛山网红
  • 基于html5的旅游网站开发一般注册公司多少钱
  • 光谷中心城建设投资有限公司网站程序开发工程师
  • 交互式多媒体网站开发wordpress如何上传mp3
  • 四川建设行业数据共享平台的网站无锡网站制作哪家强
  • 银医网站建设方案wordpress商城 中文站
  • 中小企业网站建设应该注意什么佛山有什么网站
  • 招聘网站排名企业网网站
  • 做信誉认证对网站有什么好处网络规划设计师和信息系统项目管理师哪个好考
  • 网站怎么加二级域名常州网站制作价格
  • 怎样做移动端网站网站网页设计海报图片