
linux device driver
天麓
很懒的码农
展开
-
慢慢欣赏linux 网络协议栈二 net_device以及初始化注册 (4.19版本)
XXX$ ls /proc/net/anycast6 dev fib_trie icmp6 igmp6 ip6_mr_vif ip_tables_matches ipv6_route netfilter packet ptype route rt_cache sockstat stat udp udplite6 xfrm_statarp dev_mcast fib_trie...原创 2022-01-25 15:15:07 · 2550 阅读 · 0 评论 -
ftrace学习-以gpio为例
关于ftrace,下面这篇文章写得比较好 https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace2/linux知识库 http://lib.youkuaiyun.com/base/linuxlinux那些事作者的blog http://blog.youkuaiyun.com/fudan_abc原创 2017-08-11 07:14:39 · 805 阅读 · 0 评论 -
gpio驱动分析
参考文档1:gpio驱动程序https://www.cnblogs.com/downey-blog/p/10501709.html原创 2021-12-15 09:46:41 · 373 阅读 · 0 评论 -
xenomai网卡驱动分析之二 加载rtnet-ko后sys文件系统的信息
root@bogon:/usr/xenomai_debug/sbin# ls /dev/rtnet -lcrw------- 1 root root 10, 240 11月 16 22:25 /dev/rtnetroot@bogon:/usr/xenomai_debug/sbin# ls /sys/bus/amba clocksource cpu event_source gpio hid iio mipi-dsi mmc_rpmb nvmem p.原创 2021-11-17 17:33:38 · 724 阅读 · 0 评论 -
慢慢欣赏linux之串口驱动 串口的遗留问题
1 串口在uboot上以 console=ttyAMA1, 115200, 8n1的方式作为引导内核参数。但是,如果串口以ko的形式加载的话,则串口没有shell登录界面。原因可能是:这时加载串口驱动,波特率使用默认参数9600,届时使用环境验证一下。2 串口如何修改数据长度 5 6 7 83 tty驱动console参数如何传递给uart driver...原创 2021-11-12 21:41:20 · 622 阅读 · 0 评论 -
慢慢欣赏linux之串口驱动代码分析 串口与tty挂接方法
getty -L ttyAMA0 115200 vt100需要strace和ftrace分析一下流程参考文档1 gettyhttps://wiki.debian.org/getty2 Linux getty命令https://www.runoob.com/linux/linux-comm-getty.html原创 2021-11-06 07:19:03 · 1038 阅读 · 0 评论 -
慢慢欣赏linux之串口驱动代码分析 - 基于arm64 4.19.x版本
root@linux:~# uname -aLinux bogon 4.19.115 #25 SMP PREEMPT Fri Oct 15 10:46:25 CST 2021 aarch64 aarch64 aarch64 GNU/Linuxtty驱动框架分析https://blog.youkuaiyun.com/qq_37600027/article/details/84504042Linux设备模型之tty驱动架构分析https://blog.youkuaiyun.com/pan0755/article/de原创 2021-10-15 13:53:02 · 1102 阅读 · 0 评论 -
慢慢欣赏linux 中断学习之外部中断 arm glcv3虚实中断映射
对于linux开发者来说,单板上设备如果有中断,主要的工作有3步.第一步: 添加设备树的描述, 定义实中断号;第二步: 进行虚实中断映射;第三步: 申请中断通过下面的例子进行说明原创 2021-05-30 10:08:45 · 580 阅读 · 1 评论 -
慢慢欣赏linux dsa驱动
dsa官方文档https://www.kernel.org/doc/Documentation/networking/dsa/dsa.txtrtl8201以太网卡调试https://blog.youkuaiyun.com/wenjin359/article/details/82893122Linux DSA Net Switch驱动开发https://blog.youkuaiyun.com/zhu_zhu_2009/article/details/108654578phy 驱动与 switch 驱动https:原创 2021-02-26 22:37:11 · 2561 阅读 · 0 评论 -
慢慢欣赏linux 查看硬盘情况
一块硬盘两个分区[root@cliffr Desktop]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optim原创 2021-02-03 10:20:53 · 1389 阅读 · 0 评论 -
慢慢欣赏linux phy驱动初始化2
慢慢欣赏linux phy驱动初始化2mii_bus相当于phy_device控制器,很遗憾的是,它没有注册在mdio_bus总线上,这跟I2C总线不同。内核如何获取PHY设备呢? 答案是只能从设备树获取。fsl_pq_mdio_probe 函数从设备树解析platform_device获取phy_device信息fsl_pq_mdio_probe 会注册mii_bus控制器,包括控制器的phy的读写方法int fsl_pq_mdio_probe(struct platform_device原创 2020-11-29 08:04:26 · 846 阅读 · 0 评论 -
慢慢欣赏linux phy设备配置
走ifconfig ethxsys_ioctl do_vfs_ioctl vfs_ioctl sock_ioctl inet_ioctl devinet_ioctl dev_change_flags __dev_charge_flag __dev_open gfar_enet_open进入真正的流程int gfar_enet_open(struct net_device *dev){ struct原创 2020-07-26 22:11:01 · 1205 阅读 · 0 评论 -
慢慢欣赏linux phy驱动初始化
int fsl_pq_mdio_probe(struct of_device *ofdev, const struct of_device_id *match){ err = of_mdiobus_register(new_bus, np); =>int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) { /* Register the MDIO bus */ rc = mdiobus_regis.原创 2020-07-17 22:26:04 · 3235 阅读 · 0 评论 -
微视linux 通用块层之bio
int mpage_readpages(struct address_space *mapping, struct list_head *pages, unsigned nr_pages, get_block_t get_block){ for (page_idx = 0; page_idx < nr_pages; page_idx++){ struct page *pag...原创 2019-11-16 22:47:26 · 440 阅读 · 0 评论 -
SCSI学习
upper lever driver : sd sr st sg 抽象的硬盘,磁带等节点,sd的驱动程序注册;middle lever driver:scsi core:提供API给上层和下层,第一优先级加载;lower lever:HBAS 具体控制器的驱动程序,控制器注册并探测到设备,注册设备lower lever三部曲:第一步 scsi_host_alloc ...原创 2017-06-27 07:16:48 · 592 阅读 · 0 评论 -
慢慢欣赏linux 设备驱动模型class
linux内核部件分析之——设备驱动模型之classhttps://blog.youkuaiyun.com/bingqingsuimeng/article/details/7929283原创 2018-10-31 07:15:29 · 171 阅读 · 0 评论 -
慢慢欣赏linux 设备驱动模型sysfs
sysfs_lookup dentry->d_op = &sysfs_dentry_ops; dentry->d_fsdata = sysfs_get(sd); static int sysfs_open_file(struct inode *inode, struct file *file) struct sysfs_dirent *attr...原创 2018-10-31 07:16:12 · 181 阅读 · 0 评论 -
慢慢欣赏linux I2C驱动
查看sys文件系统ls /sys/bus/i2c/devices/ 1-0068 i2c-0 i2c-1 cat 1-0068/name m41t80 cat i2c-0/name MPC adpter ls /sys/devices/fe000,0000.soc85xx/fe000,3100.i2c/i2c-1/1-0068/rtc/rtc0ls /sys/cla...原创 2018-11-01 23:20:16 · 253 阅读 · 0 评论 -
慢慢欣赏linux PCI-PCIE定制化
PCI/PCIE协议还是很完美的,所以目前很是流行。所以linux内核主线代码是严格按照协议来的,例如pci_read_bases(dev, 6, PCI_ROM_ADDRESS);轮流获取6个MEM空间大小。但是由于开发是存在BUG,或者开发者没有彻底理解PCI/PCIE或是别的原因,很多设备并没有严格按照PCI/PCIE协议来实现。例如,有的设备实际上只有一个有效的BASE_ADDRE...原创 2019-03-24 19:18:51 · 998 阅读 · 1 评论 -
慢慢欣赏linux 网络协议栈一 全景图
用户态软件 /\ || \/系统库函数 /\ || \/C标准库或者glibc /\ || 系统调用 \/内核态系统调用接口 /\ || \/内核协议栈L3到最上层 /\ || \/L2协议栈以及驱动 /\ || \/L1硬件网卡NIC网络初始化入口int __init net_dev_init(void) dev_proc_in......原创 2019-03-31 08:01:08 · 1120 阅读 · 0 评论 -
慢慢欣赏linux 网络协议栈二 net_device以及初始化注册
两个基本的数据结构之一:net_devicenet_device注册int register_netdev(struct net_device *dev) rtnl_lock(); if (strchr(dev->name, '%')) dev_alloc_name(dev, dev->name); register_netdevice(dev); =>in...原创 2019-03-31 08:02:53 · 1066 阅读 · 0 评论 -
慢慢欣赏linux 网络协议栈三 监听链路状态
唤醒任务队列处理消息static DECLARE_DELAYED_WORK(linkwatch_work, linkwatch_event);=>void linkwatch_event(struct work_struct *dummy) rtnl_lock(); __linkwatch_run_queue(time_after(linkwatch_nextevent, jif...原创 2019-03-31 08:04:05 · 427 阅读 · 0 评论 -
慢慢欣赏linux 网络协议栈四 sk_buff以及数据收发
以3c359x.c的网卡为例,因为这是《深入理解Linux网络技术内幕》里面的例子irqreturn_t vortex_interrupt(int irq, void *dev_id) vortex_rx(dev); =>int vortex_rx(struct net_device *dev) struct vortex_private *vp = netdev_priv(d...原创 2019-03-31 08:06:05 · 1038 阅读 · 1 评论 -
PCI-PCIE协议
PCIe学习笔记(3)---PCIe初步https://blog.youkuaiyun.com/u013140088/article/details/60574899原创 2019-04-11 07:02:29 · 3766 阅读 · 0 评论 -
慢慢欣赏linux 块设备驱动基础
Linux内核编程初探:块设备驱动程序——Ramdiskhttps://blog.youkuaiyun.com/my_xxh/article/details/48785667linux系统下块设备驱动程序https://www.cnblogs.com/facous/p/6408050.html22.Linux-块设备驱动之框架详细分析(详解)https://www.cnblogs.com/lif...原创 2019-04-20 22:00:04 · 205 阅读 · 0 评论 -
linux设备驱动模型代码分析
struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info) struct i2c_client *client; client->adapter = adap; client->dev.platform_data = info->platfo...原创 2019-04-19 22:37:47 · 243 阅读 · 0 评论 -
微视linux scsi驱动超时错误处理
超时错误处理从底层看起int usb_stor_control_thread(void * __us){ for(;;) { us->proto_handler(us->srb, us); =>void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us) { res...原创 2019-07-14 13:09:19 · 1096 阅读 · 0 评论 -
慢慢欣赏linux 串口节点创建实例
串口驱动一开始根据platform总线以及tty驱动和tty设备创建如下设备节点/sys/devices/platform/serial8250/tty/ttyS0/sys/devices/platform/serial8250/tty/ttyS1来源于serial8250_isa_devs = platform_device_alloc("serial8250", PLAT8250_D...原创 2018-10-28 23:37:35 · 1172 阅读 · 0 评论 -
慢慢欣赏linux powerpc中断绑核
如何查看当前中断绑核情况static int __init proc_interrupts_init(void) proc_create("interrupts", 0, NULL, &proc_interrupts_operations); /\ ...原创 2018-10-28 23:22:26 · 296 阅读 · 0 评论 -
磁盘管理开源工具TestDisk
linux和windows都可以使用原创 2017-11-26 16:59:55 · 1370 阅读 · 0 评论 -
USB学习之三 故障自恢复
USB支持热插拔。拔出插入之后如果文件句柄(mount和losetup)资源被释放,那么旧的设备节点会释放(sda),重新插入后会重新生成设备节点sda;而如果旧资源没被释放,那么会生成新的设备节点sdb, sdc。旧的设备节点和资源会被泄露。 usb会自恢复一些异常。但是如果USB固件出现故障,需要上下电才能恢复,linux驱动无法处理这种故障,除非对驱动进行大的整改。 USB卡如果固定插在开原创 2017-08-27 10:40:52 · 1261 阅读 · 0 评论 -
USB学习之一 代码分析和学习心得之初始化流程以及读写流程
usb_init //USB的第一个初始化入口 =>bus_register(&usb_bus_type);//设备驱动模型,总线注册 struct bus_type usb_bus_type = { .name = "usb", .match = usb_device_match, .ue原创 2017-06-06 07:00:16 · 2232 阅读 · 0 评论 -
慢慢欣赏linux 进程和线程(一)
进程是具有独立地址空间的;线程没有独立地址空间,内核里面只有线程,因为内核的地址空间是共享的原创 2017-05-25 20:04:02 · 467 阅读 · 0 评论 -
通用块层学习1 作用
1 为所有的块设备管理提供一个抽象视图,隐藏硬件块设备的差异性。例如很多抽象结构体,bio,gendisk。 2 提供不同的IO调度策略,能够优化性能,减少磁头移动次数,减少磁盘擦写次数,延长磁盘寿命。原创 2017-11-26 17:05:53 · 377 阅读 · 0 评论 -
linux的进程文件句柄查找
ls -l /proc/*/fd | grep home原创 2017-11-15 07:35:24 · 489 阅读 · 0 评论 -
块设备驱动文章
后期要学习和研究的http://blog.chinaunix.net/uid/15724196.html原创 2017-10-29 08:31:43 · 257 阅读 · 0 评论 -
X86内核启动分析二 从bootloader到内核
machine_specific_memory_setup =&gt;who = &quot;BIOS-e820&quot;; =&gt;sanitize_e820_map(E820_MAP, &amp;E820_MAP_NR); =&gt;if (copy_e820_map(E820_MAP, E820_MAP_NR) &lt; 0)//如果e820不可获取,那么按原创 2017-07-27 20:02:44 · 459 阅读 · 1 评论 -
x86内核启动分析一 看看打印吧
自己虚拟机的iomap [root@localhost mach-visws]# cat /proc/iomem 00000000-0009fbff : System RAM 00000000-00000000 : Crash kernel 0009fc00-0009ffff : reserved 000a0000-000bffff : Video RAM area 000c000原创 2017-07-27 19:55:39 · 1588 阅读 · 0 评论 -
慢慢欣赏linux PCI-PCIE初始化学习
powerpc的PCI/PCIE控制器枚举PCI设备实在内核里面实现的,依赖的资源主要是设备树。 设备数提供了PCI/PCIE池的空间基地址/大小,用于分配PCI/PCIE的memory空间; 如果是传统PCI设备,设备树还提供了PCI设备的中断路由表。 例如: powerpc CPU 的PCIE3对接了一个PCIE->PCI桥片,桥片接了一个PCI设备,其设备树可以如下描述:pcie@fe......原创 2017-05-30 10:53:57 · 5483 阅读 · 0 评论 -
自旋锁在单处理器环境是无效的理解
单处理器环境不需要自旋锁,调用了自旋锁的函数,里面也不是自旋锁的实现,只不过是用了层壳而已原因是:如果是非抢占的系统:(高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核。)一个进程(进入到了内核态),或者线程用了自旋锁,没有执行完毕之前,没有别的进翻译 2017-05-26 11:54:09 · 5565 阅读 · 1 评论