From: Paul Wise <pabs3@bonedaddy.net>
To: Jean Delvare <jdelvare@suse.de>, Wolfram Sang <wsa@kernel.org>
Cc: linux-i2c@vger.kernel.org, Paul Wise <pabs3@bonedaddy.net>
Subject: [PATCH i2c-tools v2] i2cdetect: add messages for errors during bus listing
Date: Fri, 26 May 2023 08:24:31 +0800 [thread overview]
Message-ID: <20230526002445.57064-1-pabs3@bonedaddy.net> (raw)
Include appropriate commands for fixing the errors.
This makes it easier for new users to understand what is going on when
they have a problem listing i2c busses that they do not understand.
Inspired-by: https://lists.debian.org/msgid-search/E1poMGW-0002KT-8Q@enotuniq.net
---
tools/i2cbusses.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
v2: fixed some whitespace styling, updated recipient addresses
diff --git a/tools/i2cbusses.c b/tools/i2cbusses.c
index d23ee7a..8d16905 100644
--- a/tools/i2cbusses.c
+++ b/tools/i2cbusses.c
@@ -137,6 +137,24 @@ static int sort_i2c_busses(const void *a, const void *b)
return adap1->nr - adap2->nr;
}
+static int dir_has_entries(const char* path)
+{
+ struct dirent *de;
+ DIR *dir;
+ if ((dir = opendir(path))) {
+ while ((de = readdir(dir)) != NULL) {
+ if (!strcmp(de->d_name, "."))
+ continue;
+ if (!strcmp(de->d_name, ".."))
+ continue;
+ closedir(dir);
+ return 1;
+ }
+ closedir(dir);
+ }
+ return 0;
+}
+
struct i2c_adap *gather_i2c_busses(void)
{
char s[120];
@@ -144,6 +162,7 @@ struct i2c_adap *gather_i2c_busses(void)
DIR *dir, *ddir;
FILE *f;
char fstype[NAME_MAX], sysfs[NAME_MAX], n[NAME_MAX];
+ size_t sysfs_end = 0;
int foundsysfs = 0;
int len, count = 0;
struct i2c_adap *adapters;
@@ -199,6 +218,13 @@ struct i2c_adap *gather_i2c_busses(void)
/* look in sysfs */
/* First figure out where sysfs was mounted */
if ((f = fopen("/proc/mounts", "r")) == NULL) {
+ fprintf(stderr, "Error: Could not open /proc/mounts: "
+ "%s\n", strerror(errno));
+ if (errno == ENOENT) {
+ fprintf(stderr, "Please mount procfs: "
+ "%smount -t procfs proc /proc\n",
+ getenv("SUDO_COMMAND") ? "sudo " : "");
+ }
goto done;
}
while (fgets(n, NAME_MAX, f)) {
@@ -210,15 +236,43 @@ struct i2c_adap *gather_i2c_busses(void)
}
fclose(f);
if (! foundsysfs) {
+ fprintf(stderr, "Error: Could not find sysfs mount\n");
+ fprintf(stderr, "Please mount sysfs: "
+ "%smount -t sysfs sysfs /sys\n",
+ getenv("SUDO_COMMAND") ? "sudo " : "");
goto done;
}
/* Bus numbers in i2c-adapter don't necessarily match those in
i2c-dev and what we really care about are the i2c-dev numbers.
Unfortunately the names are harder to get in i2c-dev */
+ sysfs_end = strlen(sysfs);
strcat(sysfs, "/class/i2c-dev");
- if(!(dir = opendir(sysfs)))
+ if (!(dir = opendir(sysfs))) {
+ if (errno == ENOENT) {
+ /* Check if there are i2c bus devices in other dirs
+ as when there are none the error isn't useful
+ as loading i2c-dev also won't find devices */
+ int devices_present = 0;
+ strcpy(sysfs + sysfs_end, "/bus/i2c/devices");
+ devices_present = dir_has_entries(sysfs);
+ if (! devices_present) {
+ strcpy(sysfs + sysfs_end, "/class/i2c-adapter");
+ devices_present = dir_has_entries(sysfs);
+ }
+ if (devices_present) {
+ fprintf(stderr, "Error: Could not find dir "
+ "`%s`\n", sysfs);
+ fprintf(stderr, "Please load i2c-dev: "
+ "%smodprobe i2c-dev\n",
+ getenv("SUDO_COMMAND") ? "sudo " : "");
+ }
+ } else {
+ fprintf(stderr, "Error: Could not open dir "
+ "`%s': %s\n", sysfs, strerror(errno));
+ }
goto done;
+ }
/* go through the busses */
while ((de = readdir(dir)) != NULL) {
if (!strcmp(de->d_name, "."))
--
2.40.1
next reply other threads:[~2023-05-26 0:35 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-26 0:24 Paul Wise [this message]
2023-06-14 21:31 ` [PATCH i2c-tools v2] i2cdetect: add messages for errors during bus listing Wolfram Sang
2023-06-15 1:51 ` Paul Wise
2023-06-19 14:37 ` Jean Delvare
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230526002445.57064-1-pabs3@bonedaddy.net \
--to=pabs3@bonedaddy.net \
--cc=jdelvare@suse.de \
--cc=linux-i2c@vger.kernel.org \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox