Hello everybody,
Currently I am porting the latest piCore (v8.0) to Beaglebone Black. Now I am encountering a weird issue:
When "tc-config" is running, it fails to mount/install the tce/optional extensions. I tried to debug with appending "showapps" to CMDLINE, it fails with following error:
Booting Core 8.0
Running Linux Kernel 4.4.27-ti-r62.
Checking boot options... Done.
Starting udev daemon for hotplug support... Done.
Scanning hard disk partitions to create /etc/fstab
Setting Language to C Done.
Skipping rtc as requested from the boot command line.
Possible swap partition(s) enabled.
Loading extensions...
Traceback (most recent call last):
File "/usr/bin/tce-bootload", line 15, in <module>
OSError: [Errno 13] EACCES
Done.
Setting keymap to us Done.
Restoring backup files from /mnt/mmcblk0p2/tce/mydata.tgz -
Done.
Either way, when I get dropped to (serial) shell .. modules "loop", "zram" and "squashfs" are loaded (as MODULE from initrd).. and I can load and start extensions via "tce-load -i <package_location>" without issues. Just the auto-loading *onboot* is not working
Here is what I did to create the image:
#!/bin/bash
SECT_SIZE=512
DEPMOD="/tmp/depmod.pl"
BASEDIR="/tmp/rb"
ORIG_INITRD_PI_NAME="8.0v7.gz"
BONE_IMG="/tmp/bone-debian-8.6-console-armhf-2016-10-30-2gb.img"
PICORE_IMG="/tmp/piCore_8.0.img"
BBB_START_SECT="8192"
PICORE_PART1_START_SECT="2048"
PICORE_PART2_START_SECT="53248"
BONE_BASE_MNT="/tmp/rb/mnt/bone"
PICORE_BASE_MNT="/tmp/rb/mnt/picore"
MNT_ROOTFS="rootfs"
INITRD_BBB_TMPDIR="/tmp/rb/initrd_bbb"
INITRD_PICORE_TMPDIR="/tmp/rb/initrd_pi"
INITRD_OUTPUT_TMPDIR="/tmp/rb/initrd_out"
MYDATA_TMPDIR="/tmp/rb/mydata_tmp"
OUTPUT_DIR="/tmp/rb/output"
if [ ! -f "$BONE_IMG" ]
then
echo "[-] Input BBB image $BONE_IMG not found!"
exit 0
fi
if [ ! -f "$PICORE_IMG" ]
then
echo "[-] Input BBB image $BONE_IMG not found!"
exit 0
fi
echo "[+] Creating output directories"
mkdir -p $OUTPUT_DIR/boot &> /dev/null
echo "[+] Ensuring output directories are clean.. (If you didnt save.. you just lost!)"
rm -R $OUTPUT_DIR/boot/* &> /dev/null
rm -R $OUTPUT_DIR/rootfs/* &> /dev/null
echo "[+] Creating mount points..."
mkdir -p $BONE_BASE_MNT/rootfs &> /dev/null || echo "[-] $BONE_BASE_MNT/rootfs already exists..."
mkdir -p $PICORE_BASE_MNT/boot &> /dev/null || echo "[-] $BONE_BASE_MNT/boot already exists..."
mkdir -p $PICORE_BASE_MNT/rootfs &> /dev/null || echo "[-] $PICORE_BASE_MNT/rootfs already exists..."
echo "[+] Making sure nothing is mounted there currently"
umount $BONE_BASE_MNT/rootfs &> /dev/null
umount $PICORE_BASE_MNT/boot &> /dev/null
umount $PICORE_BASE_MNT/rootfs &> /dev/null
echo "[+] Mounting the images"
mount $BONE_IMG $BONE_BASE_MNT/rootfs -o offset=$(($SECT_SIZE * $BBB_START_SECT)) || echo "[-] Failed to mount rootfs from BBB image..." | exit 0
mount $PICORE_IMG $PICORE_BASE_MNT/boot -o offset=$(($SECT_SIZE * $PICORE_PART1_START_SECT)) || echo "[-] Failed to mount boot from piCore image..." | exit 0
mount $PICORE_IMG $PICORE_BASE_MNT/rootfs -o offset=$(($SECT_SIZE * $PICORE_PART2_START_SECT)) || echo "[-] Failed to mount rootfs from piCore image..." | exit 0
BONE_KERNEL=$(ls "$BONE_BASE_MNT/rootfs/lib/modules/")
echo "[+] Bone Kernel Version: $BONE_KERNEL"
echo "[+] Copying uEnv and boot file from bbb image to output-dir"
cp $BONE_BASE_MNT/rootfs/uEnv.txt $OUTPUT_DIR/boot/
cp -r $BONE_BASE_MNT/rootfs/boot $OUTPUT_DIR/boot/
echo "# Add nortc to cmdline.. and change root=/dev/mmc... -> root=\${mmcroot}" >> "$OUTPUT_DIR/boot/uEnv.txt"
vi $OUTPUT_DIR/boot/uEnv.txt
echo "[+] Verifying file layout"
if [ ! -f $OUTPUT_DIR/boot/uEnv.txt ]
then
echo "[-] File not found: $OUTPUT_DIR/boot/uEnv.txt ... Aborting!"
exit 0
fi
if [ ! -f $OUTPUT_DIR/boot/boot/initrd.img-$BONE_KERNEL ]
then
echo "[-] File not found: $OUTPUT_DIR/boot/boot/initrd.img-$BONE_KERNEL ... Aborting!"
exit 0
fi
if [ ! -f $PICORE_BASE_MNT/boot/$ORIG_INITRD_PI_NAME ]
then
echo "[-] File not found: $PICORE_BASE_MNT/boot/$ORIG_INITRD_PI_NAME ... Aborting!"
exit 0
fi
echo "[+] Copying Initrd to temp-dir for modification"
cp $PICORE_BASE_MNT/boot/$ORIG_INITRD_PI_NAME $BASEDIR/initrd_pi.cpio.gz || echo "[-] Failed to copy piCore Initrd..." | exit 0
cp $OUTPUT_DIR/boot/boot/initrd.img-$BONE_KERNEL $BASEDIR/initrd_bbb.cpio.gz || echo "[-] Failed to copy BBB Initrd..." | exit 0
echo "[+] Unpacking Initrds..."
rm -Rf $INITRD_BBB_TMPDIR &> /dev/null
rm -Rf $INITRD_PICORE_TMPDIR &> /dev/null
mkdir -p $INITRD_BBB_TMPDIR &> /dev/null
mkdir -p $INITRD_PICORE_TMPDIR &> /dev/null
cd "$INITRD_BBB_TMPDIR"
gunzip -c "$BASEDIR/initrd_bbb.cpio.gz" | cpio -imd
cd "$INITRD_PICORE_TMPDIR"
gunzip -c "$BASEDIR/initrd_pi.cpio.gz" | cpio -imd
echo "[+] Assembling new initrd"
rm -rf $INITRD_OUTPUT_TMPDIR &> /dev/null
cp -r $INITRD_PICORE_TMPDIR $INITRD_OUTPUT_TMPDIR
rm -rf $INITRD_OUTPUT_TMPDIR/lib/modules/*
cp -r $INITRD_BBB_TMPDIR/lib/modules/$BONE_KERNEL $INITRD_OUTPUT_TMPDIR/lib/modules/$BONE_KERNEL
echo "[+] Copying additional squashfs module..."
mkdir -p $INITRD_OUTPUT_TMPDIR/lib/modules/$BONE_KERNEL/kernel/fs/squashfs
cp -r $BONE_BASE_MNT/rootfs/lib/modules/$BONE_KERNEL/kernel/fs/squashfs/squashfs.ko $INITRD_OUTPUT_TMPDIR/lib/modules/$BONE_KERNEL/kernel/fs/squashfs
echo "[+] Symlinking modules"
rm -rf $INITRD_OUTPUT_TMPDIR/usr/local/lib/modules/$BONE_KERNEL
ln -s /lib/modules/$BONE_KERNEL $INITRD_OUTPUT_TMPDIR/usr/local/lib/modules/$BONE_KERNEL
ln -s /lib/modules/$BONE_KERNEL/kernel $INITRD_OUTPUT_TMPDIR/lib/modules/$BONE_KERNEL/kernel.tclocal
echo "[+] Please edit /usr/sbin/startserialtty according to your serial interface"
vi $INITRD_OUTPUT_TMPDIR/usr/sbin/startserialtty
echo "[+] Running depmod in chroot"
$DEPMOD -F $OUTPUT_DIR/boot/boot/System.map-$BONE_KERNEL -b $INITRD_OUTPUT_TMPDIR/lib/modules > $INITRD_OUTPUT_TMPDIR/lib/modules/$BONE_KERNEL/modules.dep
echo "[+] Repacking initrds..."
cd $INITRD_OUTPUT_TMPDIR
find . | cpio -o -H newc | gzip > $OUTPUT_DIR/initrd.gz
cp $OUTPUT_DIR/initrd.gz $OUTPUT_DIR/boot/boot/initrd.img-$BONE_KERNEL
echo "[+] Copying rootfs"
cp -r $PICORE_BASE_MNT/rootfs $OUTPUT_DIR/
echo "[+] Unmounting everything ... now that we are done..."
umount $BONE_BASE_MNT/rootfs &> /dev/null
umount $PICORE_BASE_MNT/boot &> /dev/null
umount $PICORE_BASE_MNT/rootfs &> /dev/null
echo "[+] Now please create an skeleton image, 2 partitions (1: FAT, 2: EXT4) and copy $OUTPUT_DIR/[boot, rootfs] accordingly"
# TODO: Automate partition-detection for input-images
# TODO: Create *-modules-KERNEL.tcz for audio and wireless
# TODO: Copy filesystem to dd-able img
# TODO: Some sed-action to fix up config files automatically without user-input
exit 0
Are there any nice ways to properly debug this issue? Did I miss something?
P.S: Please be kind, it's my first bigger shell script. Thanks!