[arch-dev-public] [RFC] Rewrite early RTC device creation

Thomas Bächler thomas at archlinux.org
Tue Jun 8 18:43:12 EDT 2010


Creating the RTC device will result in an error if devtmpfs is used,
as it already exists after loading the module. The new code skips
the mknod if the device is already present.

Additionally to rtc-cmos, we now also try to load rtc and genrtc,
as some custom kernels use the "old" misc RTC device instead of
the newer RTC class. In this case, the created device is also
different. This should fix FS#18078.
---
 rc.sysinit |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/rc.sysinit b/rc.sysinit
index 61b04c9..8349860 100755
--- a/rc.sysinit
+++ b/rc.sysinit
@@ -56,12 +56,18 @@ fi
 
 if [ -n "$HWCLOCK_PARAMS" ]; then
 	# enable rtc access
-	/sbin/modprobe rtc-cmos >/dev/null 2>&1
-	RTC_MAJOR=$(/bin/grep -w rtc /proc/devices 2>/dev/null)
-	RTC_MAJOR="${RTC_MAJOR%% *}"
-	if [ -n "$RTC_MAJOR" ]; then
-		/bin/mknod /dev/rtc0 c $RTC_MAJOR 0
-		/bin/ln -s /dev/rtc0 /dev/rtc
+	/sbin/modprobe -q rtc-cmos
+	# some custom kernels use rtc/genrtc, try to load those too
+	/sbin/modprobe -q rtc
+	/sbin/modprobe -q genrtc
+	# If devtmpfs is used, the required RTC device already exists now
+	# Otherwise, create whatever device is available
+	if [ ! -c /dev/rtc -a ! -c /dev/rtc0 ]; then
+		if [ -f /sys/class/rtc/rtc0/dev ]; then
+			/bin/mknod /dev/rtc0 c $(cat /sys/class/rtc/rtc0/dev | sed 's|:| |')
+		elif [ -f /sys/class/misc/rtc/dev ]; then
+			/bin/mknod /dev/rtc c $(cat /sys/class/misc/rtc/dev | sed 's|:| |')
+		fi
 	fi
 
 	# Do a clock set here for a few reasons:
-- 
1.7.1



More information about the arch-dev-public mailing list