есть такой зверек Orange PiPC2. оч хочу bsd на него поставить. По мотивам поисков в интернете пишу скрипт сборки, застрял на fat разделе на который надо залить скомпиленный ubld, с нужным адресом загрузки, кусок U-Boot конфиг и еще что-то. А что и конечное количество этого чего-то везде по разному. По вырезкам из crochet ubldr не компилится, в сырцах 12й видимо что-то поменялось...
черновик скрипта
Код: Выделить всё
#!/bin/sh
#base dir
#setenv = export
export BASEDIR=/home/bormental/arm64/head_orange_pi_pc2
#kyda kladem skompilennoe
export MAKEOBJDIRPREFIX=$BASEDIR/obj
export TARGET=arm64
export TARGET_ARCH=aarch64
export UBLDR_LOADADDR=0x42000000
export KERNCONF=ORANGEPIPC2
export IMGFILENAME=OrangePiPC2.img
export SIZEIMGMB=8000
export __MAKE_CONF=/dev/null
export SRCCONF=/dev/null
#CPUTYPE=H5 dlya makeworld
#poluchim ishodniki freebsd
cd $BASEDIR
if [ "$1" = "" ];
then
echo "usage: $0.sh [all|src|mk|img|boot]"
fi
if [ "$1" = "all" ] || [ "$1" = "src" ];
then
git clone git://github.com/freebsd/freebsd.git src
cd $BASEDIR/src
git checkout master #est project/arm64
fi
if [ "$1" = "all" ] || [ "$1" = "mk" ];
then
cd $BASEDIR/src
if [-f $BASEDIR/src/sys/arm64/conf/$KERNCONF];
then
echo 'kernel conf file exists..'
else
echo 'kernel conf file is not exists, coppy from GENERIC...'
cp $BASEDIR/src/sys/arm64/conf/GENERIC $BASEDIR/src/sys/arm64/conf/$KERNCONF
fi
echo 'clear old obj..'
rm -rf $BASEDIR/obj
#nado for crosscompiles
echo 'make tool chain..'
make -j $(sysctl -n hw.ncpu) kernel-toolchain > $BASEDIR/maketoolchain.log #TARGET=arm64 TARGET_ARCH=aarch64
#sobiraem mir UBLDR_LOADADDR = 0x42000000 dlya VSEH ALLWINER CPU
echo 'build world...'
make -j $(sysctl -n hw.ncpu) buildworld > $BASEDIR/buildworld.log #KERNCONF=MYGENERIC TARGET=arm64 TARGET_ARCH=aarch64 UBLDR_LOADADDR=0x42000000 #__MAKE_CONF=/dev/null
#sobiraem yadro
echo 'buld kernel..'
make -j $(sysctl -n hw.ncpu) buildkernel > $BASEDIR/buildkernel.log #KERNCONF=NYGENERIC TARGET=arm64 TARGET_ARCH=aarch64 #__MAKE_CONF=/dev/null
fi
if [ "$1" = "all" ] || [ "$1" = "img" ];
then
echo 'build image disk...'
cd $BASEDIR
dd if=/dev/zero of=$BASEDIR/$IMGFILENAME bs=1M count=$SIZEIMGMB
if ! [ -e "/usr/local/share/u-boot/u-boot-orangepi-pc2/u-boot-sunxi-with-spl.bin" ];
then
#pkg install u-boot-orangepi-pc2
/usr/ports/sysutils/u-boot-orangepi-pc2
make -DBATCH all install
fi
#dlya pi pc2 spl i u-boot v odnom file
dd if=/usr/local/share/u-boot/u-boot-orangepi-pc2/u-boot-sunxi-with-spl.bin of=$BASEDIR/$IMGFILENAME bs=1K seek=8 conv=sync,notrunc count=$SIZEIMGMB
MEMORYDISK=`mdconfig -a -t vnode -f $BASEDIR/$IMGFILENAME` #-x 63 -y 255` #-x -y from crochet.sh smisl ih poka ne ponyaten
echo $MEMORYDISK
gpart create -s MBR $MEMORYDISK #GPT
#start block 1024k for allwinner
gpart add -a 63 -b 1m -s 32m -t '!12' $MEMORYDISK # !12 - w95 fat32 -a 63 = 63*512
gpart set -a active -i 1 $MEMORYDISK # ne obyazatelno
newfs_msdos -L boot -F 16 /dev/${MEMORYDISK}s1 # v 1i razdel dobafim fat16
gpart add -t freebsd -a 512k ${MEMORYDISK}
gpart create -s BSD ${MEMORYDISK}s2
gpart add -t freebsd-ufs -a 64k ${MEMORYDISK}s2
newfs /dev/${MEMORYDISK}s2a
tunefs -N enable /dev/${MEMORYDISK}s2a # upgrade ufs system for acl list
tunefs -n enable /dev/${MEMORYDISK}s2a # soft updates
tunefs -j enable -S 4194304 /dev/${MEMORYDISK}s2a # size journal min 4M
mkdir /mnt/${MEMORYDISK}PiBoot
mount -t msdosfs /dev/${MEMORYDISK}s1 /mnt/${MEMORYDISK}PiBoot
mkdir /mnt/${MEMORYDISK}PiRoot
mount /dev/${MEMORYDISK}s2a /mnt/${MEMORYDISK}PiRoot
cd $BASEDIR/src
# mergemaster -Fp -D /mnt/${MEMORYDISCK}PiRoot
# mergemaster -Ui -p -D /mnt/${MEMORYDISCK}PiRoot
pw groupadd ntpd
pw useradd -n ntpd -g ntpd -c "ntpd unprivileged user" -d /var/empty -s /usr/sbin/nologin
echo 'installworld...'
make DESTDIR=/mnt/${MEMORYDISK}PiRoot installworld > $BASEDIR/installworld.log
echo 'distribution...'
make DESTDIR=/mnt/${MEMORYDISK}PiRoot distribution > $BASEDIR/distribution.log
echo 'installkernel...'
make DESTDIR=/mnt/${MEMORYDISK}PiRoot installkernel > $BASEDIR/installkernel.log
#delete md disk
#umount /mnt/${MEMORYDISCK}PiBoot
#umount /mnt/${MEMORYDISCK}PiRoot
#mdconfig -d -u $MEMORYDISK`
fi
if [ "$1" = "all" ] || [ "$1" = "boot" ];
then
cd ${BASEDIR}/src
UBLDR_DIR=${BASEDIR}/ubldr
UBLDR_MAKEFILES=${BASEDIIR}/src/share/mk
#opcii sborki
export SRCROOT=${BASEDIR}/src
export MAKESYSPATH=${BASEDIR}/src/share/mk
BUILDENV=`make -C ${SRCROOT} buildenvvars`
echo $BUILDENV
# BUILDENV=`make TARGET_ARCH=$TARGET_ARCH buildenvvars`
# BUILDENV="$BUILDENV SRCCONF=${SRCCONF} __MAKE_CONF=${__MAKE_CONF}"
eval ${BUILDENV} make -C ${SRCROOT}/sys/boot clean
eval ${BUILDENV} make -C ${SRCROOT}/sys/boot obj
eval ${BUILDENV} make -C ${SRCROOT}/sys/boot UBLDR_LOADADDR=${UBLDR_LOADADDR} all
exit
mkdir -p ${UBLDR_DIR}
echo $BUILDENV make "$@" -m $UBLDR_MAKEFILES all > ${UBLDR_DIR}/ubldr.sh
rm -rf $UBLDR_DIR/boot
mkdir -p $UBLDR_DIR/boot/defaults
cd stand
eval ${BUILDENV} make "$@" -m ${UBLDR_MAKEFILES} clean >> $BASEDIR/UBLDRBuild.log #2>&1
eval ${BUILDENV} make "$@" -m ${UBLDR_MAKEFILES} obj > $BASEDIR/UBLDRBuild.log #2>&1 #2>&1 duplicate error to stdout
eval ${BUILDENV} make "$@" -m ${UBLDR_MAKEFILES} depend >> $BASEDIR/UBLDRBuild.log #2>&1
exit
if /bin/sh -e ${UBLDR_DIR}/ubldr.sh >> $LOGFILE 2>&1
then
cd /arm/uboot
eval $BUILDENV make "$@" DESTDIR=${UBLDR_DIR}/ BINDIR=boot MK_MAN=no -m $UBLDR_MAKEFILES install >> $LOGFILE || exit 1
else
echo "Filed build UBLDR log=$LOGFILE"
exit 1
fi
fi