r1699

stsp at dslinux.in-berlin.de stsp at dslinux.in-berlin.de
Sun Apr 1 01:45:50 CEST 2007


Author: stsp
Date: 2007-04-01 01:45:44 +0200 (Sun, 01 Apr 2007)
New Revision: 1699

Log:
Initial shot at adding support for ext2 to the RAM build.

This is not like GBAMP-EXT2, i.e. the root filesystem will
remain a romfs filesystem. The ext2 filesystem is mounted on /media.

I've added ext2 support to the kernel config, and changed
/boot/rc to take ext2 filesystems on the second primary
partition into account.

The annoying tab-completion issue I've been having on my 2GB SD card
is now gone, so apparently Amadeus was right and it's been indeed
caused by a bug in the FAT filesystem code.

I've renamed the /dev/mmcblk0 and /dev/mmcblk1 devices
to /dev/mmc and /dev/mmc1 to make scripting filesystem mount in
/boot/rc a little easier. And I've added /dev/mmc2 to be able to
mount the second partition.

One issue that still remains is that we are currently unable
to properly unmount the ext2 filesystem when the system is powered off,
so the filesystem needs to be fsck'd before it can be used again.
I've added umount to busybox but failed to unmount /media
manually before powering off because the filesystem was busy.
I will look into that next.


Modified: trunk/vendors/Nintendo/RAM/Makefile
===================================================================
--- trunk/vendors/Nintendo/RAM/Makefile	2007-03-30 15:11:42 UTC (rev 1698)
+++ trunk/vendors/Nintendo/RAM/Makefile	2007-03-31 23:45:44 UTC (rev 1699)
@@ -7,11 +7,10 @@
 ROMFSIMG = $(IMAGEDIR)/romfs.img
 ELFIMAGE = $(IMAGEDIR)/image.elf
 
-FATFS	 = media
+MEDIAFS	 = media
 
+ROMFS_DIRS = boot dev proc sbin $(MEDIAFS)/linux
 
-ROMFS_DIRS = boot dev proc sbin $(FATFS)/linux
-
 FS_DIRS = etc/rc.d home lib usr/bin usr/games usr/lib usr/share/udhcpc var/tmp var/run
 
 DEVICES = \
@@ -20,8 +19,9 @@
 	mem,c,1,1      kmem,c,1,2         null,c,1,3       ram0,b,1,0 \
 	ram1,b,1,1 \
 	\
-	mmcblk0,b,254,0 \
-	mmcblk1,b,254,1 \
+	mmc,b,254,0 \
+	mmc1,b,254,1 \
+	mmc2,b,254,2 \
 	\
 	hda,b,3,0      hda1,b,3,1         hda2,b,3,2	   hda3,b,3,3 \
 	hda4,b,3,4 \
@@ -69,22 +69,22 @@
 	# on non-ptmx ptys
 	chmod 620 $(ROMFSDIR)/dev/@[pt]ty[pqrsPQRS][0-9a-f],*
 	for i in $(FS_DIRS); do \
-		[ -d $(ROMFSDIR)/$(FATFS)/linux/$$i ] || mkdir -p $(ROMFSDIR)/$(FATFS)/linux/$$i; \
+		[ -d $(ROMFSDIR)/$(MEDIAFS)/linux/$$i ] || mkdir -p $(ROMFSDIR)/$(MEDIAFS)/linux/$$i; \
 	done
-	$(ROMFSINST) -s $(FATFS)/linux/var /var
-	$(ROMFSINST) -s $(FATFS)/linux/lib /lib
-	$(ROMFSINST) -s $(FATFS)/linux/usr /usr
-	$(ROMFSINST) -s $(FATFS)/linux/usr/bin /bin
-	$(ROMFSINST) -s $(FATFS)/linux/home /home
-	$(ROMFSINST) -s $(FATFS)/linux/etc /etc
+	$(ROMFSINST) -s $(MEDIAFS)/linux/var /var
+	$(ROMFSINST) -s $(MEDIAFS)/linux/lib /lib
+	$(ROMFSINST) -s $(MEDIAFS)/linux/usr /usr
+	$(ROMFSINST) -s $(MEDIAFS)/linux/usr/bin /bin
+	$(ROMFSINST) -s $(MEDIAFS)/linux/home /home
+	$(ROMFSINST) -s $(MEDIAFS)/linux/etc /etc
 	$(ROMFSINST) -s /var/tmp /tmp
 	$(ROMFSINST) /boot/rc
 	$(ROMFSINST) /boot/inittab
-	$(ROMFSINST) /$(FATFS)/linux/etc/issue
-	$(ROMFSINST) $(NDS_COMMON)/rc.common /$(FATFS)/linux/etc/rc.common
-	$(ROMFSINST) $(NDS_COMMON)/rc.defaults /$(FATFS)/linux/etc/rc.defaults
+	$(ROMFSINST) /$(MEDIAFS)/linux/etc/issue
+	$(ROMFSINST) $(NDS_COMMON)/rc.common /$(MEDIAFS)/linux/etc/rc.common
+	$(ROMFSINST) $(NDS_COMMON)/rc.defaults /$(MEDIAFS)/linux/etc/rc.defaults
 	for f in $(NDS_COMMON)/rc.d/*; do \
-		[ -d $$f ] || $(ROMFSINST) $$f /$(FATFS)/linux/etc/rc.d/ ; \
+		[ -d $$f ] || $(ROMFSINST) $$f /$(MEDIAFS)/linux/etc/rc.d/ ; \
 	done
 
 	$(ROMFSINST) -p +x $(NDS_COMMON)/default.script /usr/share/udhcpc/default.script
@@ -98,21 +98,21 @@
 	mkdir $(ROMFSDIR)/bin
 	-for i in `sort $(ROOTDIR)/user/busybox/busybox.links` ; do\
 		j=`basename $$i` ; \
-		mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/$$j $(ROMFSDIR)/bin ; \
+		mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/$$j $(ROMFSDIR)/bin ; \
 	done
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/busybox $(ROMFSDIR)/bin
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/mount $(ROMFSDIR)/bin
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/sh $(ROMFSDIR)/bin
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/login $(ROMFSDIR)/bin
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/init $(ROMFSDIR)/bin
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/autologin $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/busybox $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/mount $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/sh $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/login $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/init $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/autologin $(ROMFSDIR)/bin
 	# move MADPLAY into internal RAM and make it XIP, to gain the processing power
 	# for undisturbed audio.
-	-mv $(ROMFSDIR)/$(FATFS)/linux/usr/bin/madplay $(ROMFSDIR)/bin
+	-mv $(ROMFSDIR)/$(MEDIAFS)/linux/usr/bin/madplay $(ROMFSDIR)/bin
 	$(CROSS)flthdr -R $(ROMFSDIR)/bin/madplay
 	$(CROSS_COMPILE)flthdr -Z $(ROMFSDIR)/bin/*
 	-rm -r $(IMAGEDIR)/linux
-	mv $(ROMFSDIR)/$(FATFS)/linux $(IMAGEDIR)
+	mv $(ROMFSDIR)/$(MEDIAFS)/linux $(IMAGEDIR)
 	genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
 	BSS=`$(CROSS_COMPILE)objdump --headers $(ROOTDIR)/$(LINUXDIR)/linux | \
 	grep .bss` && \

Modified: trunk/vendors/Nintendo/RAM/config.linux-2.6.x
===================================================================
--- trunk/vendors/Nintendo/RAM/config.linux-2.6.x	2007-03-30 15:11:42 UTC (rev 1698)
+++ trunk/vendors/Nintendo/RAM/config.linux-2.6.x	2007-03-31 23:45:44 UTC (rev 1699)
@@ -1,6 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.14-hsc0
+# Sat Mar 31 23:56:00 2007
 #
 CONFIG_ARM=y
 # CONFIG_MMU is not set
@@ -338,13 +339,13 @@
 #
 # Block devices
 #
+# CONFIG_NDS_DLDI is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
 # CONFIG_BLK_DEV_RAM is not set
 CONFIG_BLK_DEV_RAM_COUNT=16
 # CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_NDS_DLDI is not set
 
 #
 # IO Schedulers
@@ -672,7 +673,9 @@
 #
 # File systems
 #
-# CONFIG_EXT2_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set

Modified: trunk/vendors/Nintendo/RAM/config.vendor
===================================================================
--- trunk/vendors/Nintendo/RAM/config.vendor	2007-03-30 15:11:42 UTC (rev 1698)
+++ trunk/vendors/Nintendo/RAM/config.vendor	2007-03-31 23:45:44 UTC (rev 1699)
@@ -652,7 +652,8 @@
 # CONFIG_USER_BUSYBOX_UDHCPD is not set
 # CONFIG_USER_BUSYBOX_UDHCP_DEBUG is not set
 # CONFIG_USER_BUSYBOX_UDHCP_SYSLOG is not set
-# CONFIG_USER_BUSYBOX_UMOUNT is not set
+CONFIG_USER_BUSYBOX_UMOUNT=y
+# CONFIG_USER_BUSYBOX_MOUNT_FORCE is not set
 CONFIG_USER_BUSYBOX_UNAME=y
 # CONFIG_USER_BUSYBOX_UNCOMPRESS is not set
 # CONFIG_USER_BUSYBOX_UNIQ is not set

Modified: trunk/vendors/Nintendo/RAM/rc
===================================================================
--- trunk/vendors/Nintendo/RAM/rc	2007-03-30 15:11:42 UTC (rev 1698)
+++ trunk/vendors/Nintendo/RAM/rc	2007-03-31 23:45:44 UTC (rev 1699)
@@ -1,22 +1,47 @@
 #!/bin/sh
 
 mount -t proc none /proc
-mount -t vfat -o noatime /dev/mmcblk1 /media
-if [ "$?" != "0" ]
-then
-	mount -t vfat -o noatime /dev/hda1 /media
-	if [ "$?" != "0" ]
+
+echo "Trying to mount a filesystem on CF/SD card."
+
+# Try mounting SD cards first, then try CF
+fs_found=notyet
+for dev in hda mmc
+do
+	# Do we have an ext2 filesystem in the second partition?
+	mount -t ext2 -o noatime /dev/${dev}2 /media
+	if [ $? = 0 ]
 	then
-		# some CF cards do not have a partition table
-		# try mounting /dev/hda
-		mount -t vfat -o noatime /dev/hda /media
-		if [ "$?" != "0" ]
-		then
-			# some SD cards do not have a partition table
-			# try mounting /dev/mmcblk0
-			mount -t vfat -o noatime /dev/mmcblk0 /media
-			[ "$?" = "0" ] || echo "Sorry, failed to mount your CF/SD card."
-		fi
+		echo "Mounted /dev/${dev}2 on /media (ext2)"
+		fs_found=yes
+		break
 	fi
+
+	# No ext2, fallback to vfat on first partition
+	mount -t vfat -o noatime /dev/${dev}1 /media
+	if [ $? = 0 ]
+	then
+		echo "Mounted /dev/${dev}1 on /media (vfat)"
+		fs_found=yes
+		break
+	fi
+
+	# Mmmh. Maybe we have a card without a partition table?
+	mount -t vfat -o noatime /dev/${dev} /media
+	if [ $? = 0 ]
+	then
+		echo "Mounted /dev/${dev} on /media (vfat)"
+		fs_found=yes
+		break
+	fi
+
+done
+
+if [ "${fs_found}" != "yes" ]
+then
+	echo "Sorry, failed to mount your CF/SD card."
+	echo "Dropping you into a shell..."
+	exec /bin/sh
 fi
+
 . /etc/rc.common




More information about the dslinux-commit mailing list