From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD39EC433E0 for ; Wed, 17 Mar 2021 15:53:04 +0000 (UTC) Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E27CE64F4D for ; Wed, 17 Mar 2021 15:53:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E27CE64F4D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gpanders.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kernelnewbies-bounces@kernelnewbies.org Received: from localhost ([::1] helo=shelob.surriel.com) by shelob.surriel.com with esmtp (Exim 4.94) (envelope-from ) id 1lMYTR-0007NT-3P; Wed, 17 Mar 2021 11:52:41 -0400 Received: from relay13.mail.gandi.net ([217.70.178.233]) by shelob.surriel.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1lMYTO-0007ND-Le for kernelnewbies@kernelnewbies.org; Wed, 17 Mar 2021 11:52:38 -0400 Received: from localhost (c-73-228-7-205.hsd1.nm.comcast.net [73.228.7.205]) (Authenticated sender: greg@gpanders.com) by relay13.mail.gandi.net (Postfix) with ESMTPSA id 9346380016 for ; Wed, 17 Mar 2021 15:52:35 +0000 (UTC) Date: Wed, 17 Mar 2021 09:52:32 -0600 From: Gregory Anders To: kernelnewbies@kernelnewbies.org Subject: Device file not appearing Message-ID: Mail-Followup-To: kernelnewbies@kernelnewbies.org MIME-Version: 1.0 Content-Disposition: inline X-BeenThere: kernelnewbies@kernelnewbies.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Learn about the Linux kernel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: kernelnewbies-bounces@kernelnewbies.org Hi all, I'm writing a char device driver and am having trouble getting the file to appear under /dev. This isn't my first rodeo: in fact, I've written a few other drivers in the past and they have all worked as expected. This driver is based on the source code of those other drivers, so I'm fairly confident I'm doing everything correctly. So I'm stumped and looking for help. Here is what I have in my init function: #define DRIVER_NAME "foo" static int __init mod_init(void) { dev_t devno; my_class = class_create(THIS_MODULE, DRIVER_NAME); ret = alloc_chrdev_region(&devno, 0, MAX_DEVICES, DRIVER_NAME); my_major = MAJOR(devno); ... } (Note that for brevity I'm omitting a lot of boilerplate/error handling, etc. But you can assume it's all there). My driver is also a network driver; in fact, it's *primarily* a network driver and it provides a char device file that is used to configure the hardware. I am creating the char device whenever the network device is first opened (e.g. 'netdev_open' below is the 'ndo_open' field of the 'struct netdev_ops'): struct private_data { struct cdev cdev; ... } static int netdev_open(struct net_device *dev) { struct private_data *priv = netdev_priv(dev); dev_t devno; int minor; struct device *d; minor = ida_alloc_max(&ida, MAX_DEVICES, GFP_KERNEL); devno = MKDEV(my_major, minor); cdev_init(&priv->cdev, &my_fops); cdev_add(&priv->cdev, devno, 1); /* This should create a device node with the same name as the * network interface, e.g. foo0 */ d = device_create(my_class, NULL, devno, priv, dev->name); if (IS_ERR(d)) { ... } ... } Again, I'm omitting the error checking for the sake of brevity, but it is there in the actual code. This function runs successfully and the network device is successfully opened. The 'device_create' function does not return an error, but there is nothing beneath /dev as I would expect. I'm really stumped here because everything I've been able to find online says that 'device_create' ought to create that device file. I can see my class under /sys/class/ and that directory contains a directory with the name of the device: $ ls -1 /sys/class/my_class/ foo0 so it looks like the char device *is* being created, there's just no corresponding entry under /dev. Anyway, I know that's a lot of info. If you've made it this far, thanks for reading. If you have any insight/advice/suggestions for me I'd greatly appreciate it! Thanks, Greg _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies