u-boot-sinovoip-bpi-m3: Update to u-boot-master
Update to u-boot-master model, moved MAINTAINER to uboot@. This brings the version from 2016.05 (super old) to 2017.09 under the unified FreeBSD u-boot model. All of the patches previously here have been made redundant, either by upstream or by using our U-Boot repository with FreeBSD patches applied. Reviewed by: imp, manu Approved by: imp, jmcneill (maintainer) Differential Revision: https://reviews.freebsd.org/D13352
This commit is contained in:
parent
64958279a1
commit
d570e33f55
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=455629
@ -1,51 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= u-boot
|
||||
PORTVERSION= 2016.05
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= ftp://ftp.denx.de/pub/u-boot/
|
||||
PKGNAMESUFFIX?= -sinovoip-bpi-m3
|
||||
MAINTAINER= uboot@FreeBSD.org
|
||||
MASTERDIR= ${.CURDIR}/../u-boot-master
|
||||
|
||||
MAINTAINER= jmcneill@FreeBSD.org
|
||||
COMMENT= Cross-build U-Boot loader for Sinovoip Banana Pi M3
|
||||
MODEL= sinovoip-bpi-m3
|
||||
BOARD_CONFIG= Sinovoip_BPI_M3_defconfig
|
||||
FAMILY= allwinner
|
||||
|
||||
LICENSE= GPLv2
|
||||
|
||||
BUILD_DEPENDS= arm-none-eabi-gcc:devel/arm-none-eabi-gcc
|
||||
|
||||
USES= gmake tar:bzip2
|
||||
WRKSRC= ${WRKDIR}/u-boot-${DISTVERSION}
|
||||
|
||||
.include <bsd.port.pre.mk>
|
||||
NO_ARCH= yes
|
||||
|
||||
MODEL?= sinovoip-bpi-m3
|
||||
CONF_TARGET?= Sinovoip_BPI_M3_defconfig
|
||||
|
||||
SSP_UNSAFE= yes # cross-LD does not support -fstack-protector
|
||||
|
||||
U_BOOT_DIR= share/u-boot/${PORTNAME}${PKGNAMESUFFIX}
|
||||
PLIST_FILES= ${U_BOOT_DIR}/u-boot.img \
|
||||
${U_BOOT_DIR}/u-boot-sunxi-with-spl.bin \
|
||||
${U_BOOT_DIR}/sunxi-spl.bin \
|
||||
${U_BOOT_DIR}/README
|
||||
|
||||
MAKE_ARGS+= ARCH=arm \
|
||||
CROSS_COMPILE=arm-none-eabi-
|
||||
|
||||
post-patch:
|
||||
@${REINPLACE_CMD} -e "s,%%MODEL%%,${MODEL}," \
|
||||
${WRKSRC}/include/configs/sunxi-common.h
|
||||
|
||||
do-configure:
|
||||
(cd ${WRKSRC}; ${MAKE_CMD} ${CONF_TARGET})
|
||||
|
||||
do-install:
|
||||
${MKDIR} ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
|
||||
${INSTALL_DATA} ${WRKSRC}/spl/sunxi-spl.bin ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
|
||||
${INSTALL_DATA} ${WRKSRC}/u-boot-sunxi-with-spl.bin \
|
||||
${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
|
||||
${INSTALL_DATA} ${WRKSRC}/u-boot.img ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
|
||||
${INSTALL_DATA} ${DESCR} ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}/README
|
||||
|
||||
.include <bsd.port.post.mk>
|
||||
.include "${MASTERDIR}/Makefile"
|
||||
|
@ -1,3 +0,0 @@
|
||||
TIMESTAMP = 1467921377
|
||||
SHA256 (u-boot-2016.05.tar.bz2) = 87d02275615aaf0cd007b54cbe9fbadceef2bee7c79e6c323ea1ae8956dcb171
|
||||
SIZE (u-boot-2016.05.tar.bz2) = 11325053
|
@ -1,81 +0,0 @@
|
||||
--- api/api.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ api/api.c
|
||||
@@ -495,45 +495,49 @@ static int API_env_set(va_list ap)
|
||||
*/
|
||||
static int API_env_enum(va_list ap)
|
||||
{
|
||||
- int i, n;
|
||||
- char *last, **next;
|
||||
+ int i;
|
||||
+ char *last, **next, *s;
|
||||
+ ENTRY *match, search;
|
||||
+ static char *buf;
|
||||
+ size_t buflen;
|
||||
|
||||
last = (char *)va_arg(ap, u_int32_t);
|
||||
|
||||
if ((next = (char **)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
- if (last == NULL)
|
||||
- /* start over */
|
||||
- *next = ((char *)env_get_addr(0));
|
||||
- else {
|
||||
- *next = last;
|
||||
-
|
||||
- for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
|
||||
- for (n = i; env_get_char(n) != '\0'; ++n) {
|
||||
- if (n >= CONFIG_ENV_SIZE) {
|
||||
- /* XXX shouldn't we set *next = NULL?? */
|
||||
- return 0;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (envmatch((uchar *)last, i) < 0)
|
||||
- continue;
|
||||
-
|
||||
- /* try to get next name */
|
||||
- i = n + 1;
|
||||
- if (env_get_char(i) == '\0') {
|
||||
- /* no more left */
|
||||
- *next = NULL;
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- *next = ((char *)env_get_addr(i));
|
||||
- return 0;
|
||||
+ /*
|
||||
+ * This leverages realloc's behavior of growing but never shrinking the
|
||||
+ * existing buffer.
|
||||
+ */
|
||||
+ if (last == NULL) {
|
||||
+ i = 0;
|
||||
+ buf = realloc(buf, 512); /* Start with reasonable size buf. */
|
||||
+ } else {
|
||||
+ buf = realloc(buf, strlen(last) + 1);
|
||||
+ strcpy(buf, last);
|
||||
+ if ((s = strchr(buf, '=')) != NULL)
|
||||
+ *s = 0;
|
||||
+ search.key = buf;
|
||||
+ if ((i = hsearch_r(search, FIND, &match, &env_htab, 0)) == 0) {
|
||||
+ i = API_EINVAL;
|
||||
+ goto done;
|
||||
}
|
||||
}
|
||||
|
||||
+ /* hmatch on empty string is effectively "get next entry after i". */
|
||||
+ if ((i = hmatch_r("", i, &match, &env_htab)) == 0)
|
||||
+ goto done;
|
||||
+ buflen = strlen(match->key) + strlen(match->data) + 2;
|
||||
+ buf = realloc(buf, buflen);
|
||||
+ snprintf(buf, buflen, "%s=%s", match->key, match->data);
|
||||
+ *next = buf;
|
||||
return 0;
|
||||
+done:
|
||||
+ free(buf);
|
||||
+ buf = NULL;
|
||||
+ *next = NULL;
|
||||
+ return i;
|
||||
}
|
||||
|
||||
/*
|
@ -1,11 +0,0 @@
|
||||
--- api/api_net.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ api/api_net.c
|
||||
@@ -25,7 +25,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
|
||||
-#ifdef CONFIG_CMD_NET
|
||||
+#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
|
||||
|
||||
static int dev_valid_net(void *cookie)
|
||||
{
|
@ -1,13 +0,0 @@
|
||||
--- board/sunxi/board.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ board/sunxi/board.c
|
||||
@@ -524,6 +524,10 @@ void sunxi_board_init(void)
|
||||
power_failed |= axp_set_fldo(2, CONFIG_AXP_FLDO2_VOLT);
|
||||
power_failed |= axp_set_fldo(3, CONFIG_AXP_FLDO3_VOLT);
|
||||
#endif
|
||||
+
|
||||
+#ifdef CONFIG_AXP818_POWER
|
||||
+ power_failed |= axp_set_dc1sw(CONFIG_AXP_DC1SW_EN);
|
||||
+#endif
|
||||
#endif
|
||||
printf("DRAM:");
|
||||
ramsize = sunxi_dram_init();
|
@ -1,29 +0,0 @@
|
||||
--- cmd/elf.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ cmd/elf.c
|
||||
@@ -110,22 +110,12 @@ static unsigned long do_bootelf_exec(ulo
|
||||
unsigned long ret;
|
||||
|
||||
/*
|
||||
- * QNX images require the data cache is disabled.
|
||||
- * Data cache is already flushed, so just turn it off.
|
||||
- */
|
||||
- int dcache = dcache_status();
|
||||
- if (dcache)
|
||||
- dcache_disable();
|
||||
-
|
||||
- /*
|
||||
- * pass address parameter as argv[0] (aka command name),
|
||||
- * and all remaining args
|
||||
+ * FreeBSD wants the caches enabled while ubldr runs, and as of r276397
|
||||
+ * the kernel can tolerate being entered with internal (but not external
|
||||
+ * PL310) caches enabled on armv6/7 systems. So don't disable caches
|
||||
+ * here, just launch the program directly.
|
||||
*/
|
||||
ret = entry(argc, argv);
|
||||
-
|
||||
- if (dcache)
|
||||
- dcache_enable();
|
||||
-
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
--- cmd/test.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ cmd/test.c
|
||||
@@ -56,9 +56,14 @@ static int do_test(cmd_tbl_t *cmdtp, int
|
||||
char * const *ap;
|
||||
int i, op, left, adv, expr, last_expr, last_unop, last_binop;
|
||||
|
||||
- /* args? */
|
||||
- if (argc < 3)
|
||||
+ /*
|
||||
+ * If no args, that's bogus, return false.
|
||||
+ * If op is -z and no other args, answer is Yes, string is empty.
|
||||
+ */
|
||||
+ if (argc < 2)
|
||||
return 1;
|
||||
+ else if (argc == 2)
|
||||
+ return !(strcmp(argv[1], "-z") == 0);
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
@ -1,14 +0,0 @@
|
||||
--- configs/Sinovoip_BPI_M3_defconfig.orig 2016-05-16 11:40:32.000000000 -0300
|
||||
+++ configs/Sinovoip_BPI_M3_defconfig 2016-07-07 17:05:19.339338000 -0300
|
||||
@@ -32,3 +32,11 @@
|
||||
CONFIG_AXP_DLDO3_VOLT=2500
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_MUSB_HOST=y
|
||||
+
|
||||
+# FreeBSD changes
|
||||
+CONFIG_CMD_GPIO=y
|
||||
+CONFIG_AXP_DCDC1_VOLT=3300
|
||||
+CONFIG_AXP_DC1SW_EN=1
|
||||
+# SATA port
|
||||
+#CONFIG_INITIAL_USB_SCAN_DELAY=500
|
||||
+#CONFIG_SYS_EXTRA_OPTIONS="SATAPWR=SUNXI_GPD(25)"
|
@ -1,78 +0,0 @@
|
||||
--- drivers/mmc/mmc.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ drivers/mmc/mmc.c
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
static struct list_head mmc_devices;
|
||||
static int cur_dev_num = -1;
|
||||
+static int mmc_error_print_max = -1;
|
||||
|
||||
__weak int board_mmc_getwp(struct mmc *mmc)
|
||||
{
|
||||
@@ -1586,9 +1587,14 @@ void mmc_destroy(struct mmc *mmc)
|
||||
struct blk_desc *mmc_get_dev(int dev)
|
||||
{
|
||||
struct mmc *mmc = find_mmc_device(dev);
|
||||
- if (!mmc || mmc_init(mmc))
|
||||
+ if (!mmc)
|
||||
return NULL;
|
||||
|
||||
+ /* If mmc_init fails, mmc->block_dev will be of type
|
||||
+ * DEV_TYPE_UNKNOWN with blksz and lba set to zero.
|
||||
+ */
|
||||
+ mmc_init(mmc);
|
||||
+
|
||||
return &mmc->block_dev;
|
||||
}
|
||||
#endif
|
||||
@@ -1623,7 +1629,7 @@ int mmc_start_init(struct mmc *mmc)
|
||||
err = mmc->cfg->ops->init(mmc);
|
||||
|
||||
if (err)
|
||||
- return err;
|
||||
+ goto done;
|
||||
|
||||
mmc->ddr_mode = 0;
|
||||
mmc_set_bus_width(mmc, 1);
|
||||
@@ -1633,7 +1639,7 @@ int mmc_start_init(struct mmc *mmc)
|
||||
err = mmc_go_idle(mmc);
|
||||
|
||||
if (err)
|
||||
- return err;
|
||||
+ goto done;
|
||||
|
||||
/* The internal partition reset to user partition(0) at every CMD0*/
|
||||
mmc->block_dev.hwpart = 0;
|
||||
@@ -1650,15 +1656,31 @@ int mmc_start_init(struct mmc *mmc)
|
||||
|
||||
if (err) {
|
||||
#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
|
||||
- printf("Card did not respond to voltage select!\n");
|
||||
+ if (mmc_error_print_max < 4) {
|
||||
+ mmc_error_print_max++;
|
||||
+ printf("Card did not respond to voltage select!\n");
|
||||
+ if (mmc_error_print_max == 4) {
|
||||
+ printf("Discarding further error messages\n");
|
||||
+ }
|
||||
+ }
|
||||
#endif
|
||||
- return UNUSABLE_ERR;
|
||||
+ goto done;
|
||||
}
|
||||
}
|
||||
|
||||
if (!err)
|
||||
mmc->init_in_progress = 1;
|
||||
|
||||
+done:
|
||||
+ if (err) {
|
||||
+ mmc->has_init = 0;
|
||||
+ mmc->block_dev.type = DEV_TYPE_UNKNOWN;
|
||||
+ mmc->block_dev.blksz = 0;
|
||||
+ mmc->block_dev.lba = 0;
|
||||
+ } else {
|
||||
+ mmc->has_init = 1;
|
||||
+ }
|
||||
+
|
||||
return err;
|
||||
}
|
||||
|
@ -1,16 +0,0 @@
|
||||
--- drivers/power/Kconfig.orig 2016-04-12 02:22:25 UTC
|
||||
+++ drivers/power/Kconfig
|
||||
@@ -125,6 +125,13 @@ config AXP_DCDC5_VOLT
|
||||
On A23 / A31 / A33 / A83T boards dcdc5 is VCC-DRAM and should be 1.5V,
|
||||
1.35V if DDR3L is used.
|
||||
|
||||
+config AXP_DC1SW_EN
|
||||
+ int "axp pmic dc1sw enable"
|
||||
+ depends on AXP818_POWER
|
||||
+ default 0 if AXP818_POWER
|
||||
+ ---help---
|
||||
+ Enable DC1SW switch.
|
||||
+
|
||||
config AXP_ALDO1_VOLT
|
||||
int "axp pmic (a)ldo1 voltage"
|
||||
depends on AXP221_POWER || AXP818_POWER
|
@ -1,24 +0,0 @@
|
||||
--- drivers/power/axp818.c.orig 2016-04-12 02:22:25 UTC
|
||||
+++ drivers/power/axp818.c
|
||||
@@ -225,6 +225,21 @@ int axp_set_fldo(int fldo_num, unsigned
|
||||
AXP818_OUTPUT_CTRL3_FLDO1_EN << (fldo_num - 1));
|
||||
}
|
||||
|
||||
+int
|
||||
+axp_set_dc1sw(int onoff)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ if (onoff)
|
||||
+ ret = pmic_bus_setbits(AXP818_OUTPUT_CTRL2,
|
||||
+ AXP818_OUTPUT_CTRL2_DC1SW_EN);
|
||||
+ else
|
||||
+ ret = pmic_bus_clrbits(AXP818_OUTPUT_CTRL2,
|
||||
+ AXP818_OUTPUT_CTRL2_DC1SW_EN);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
int axp_init(void)
|
||||
{
|
||||
u8 axp_chip_id;
|
@ -1,10 +0,0 @@
|
||||
--- include/axp818.h.orig 2016-04-12 02:22:25 UTC
|
||||
+++ include/axp818.h
|
||||
@@ -24,6 +24,7 @@
|
||||
#define AXP818_OUTPUT_CTRL2_DLDO2_EN (1 << 4)
|
||||
#define AXP818_OUTPUT_CTRL2_DLDO3_EN (1 << 5)
|
||||
#define AXP818_OUTPUT_CTRL2_DLDO4_EN (1 << 6)
|
||||
+#define AXP818_OUTPUT_CTRL2_DC1SW_EN (1 << 7)
|
||||
#define AXP818_OUTPUT_CTRL3 0x13
|
||||
#define AXP818_OUTPUT_CTRL3_FLDO1_EN (1 << 2)
|
||||
#define AXP818_OUTPUT_CTRL3_FLDO2_EN (1 << 3)
|
@ -1,10 +0,0 @@
|
||||
--- include/axp_pmic.h.orig 2016-04-12 02:22:25 UTC
|
||||
+++ include/axp_pmic.h
|
||||
@@ -32,6 +32,7 @@ int axp_set_aldo4(unsigned int mvolt);
|
||||
int axp_set_dldo(int dldo_num, unsigned int mvolt);
|
||||
int axp_set_eldo(int eldo_num, unsigned int mvolt);
|
||||
int axp_set_fldo(int fldo_num, unsigned int mvolt);
|
||||
+int axp_set_dc1sw(int onoff);
|
||||
int axp_init(void);
|
||||
int axp_get_sid(unsigned int *sid);
|
||||
|
@ -1,78 +0,0 @@
|
||||
--- include/configs/sunxi-common.h.orig 2016-05-16 11:40:32.000000000 -0300
|
||||
+++ include/configs/sunxi-common.h 2016-07-07 17:00:25.673890000 -0300
|
||||
@@ -513,4 +513,75 @@
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS
|
||||
#endif
|
||||
|
||||
+/*****************************************************************************
|
||||
+ * FreeBSD customizations from here down.
|
||||
+ ****************************************************************************/
|
||||
+
|
||||
+/* Add the API and ELF features needed for ubldr. */
|
||||
+#ifndef CONFIG_SPL_BUILD
|
||||
+#define CONFIG_API
|
||||
+#ifndef CONFIG_CMD_ELF
|
||||
+#define CONFIG_CMD_ELF
|
||||
+#endif
|
||||
+#ifndef CONFIG_CMD_ENV_EXISTS
|
||||
+#define CONFIG_CMD_ENV_EXISTS
|
||||
+#endif
|
||||
+#define CONFIG_EFI_PARTITION
|
||||
+#endif
|
||||
+
|
||||
+/* Turn off dcache. */
|
||||
+#ifndef CONFIG_SPL_BUILD
|
||||
+#define CONFIG_SYS_DCACHE_OFF
|
||||
+#define CONFIG_CMD_CACHE
|
||||
+#endif
|
||||
+
|
||||
+/* Save the env to the fat partition. */
|
||||
+#ifndef CONFIG_SPL_BUILD
|
||||
+#undef CONFIG_ENV_IS_NOWHERE
|
||||
+#undef CONFIG_ENV_IS_IN_NAND
|
||||
+#undef CONFIG_ENV_IS_IN_MMC
|
||||
+#undef CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
+#define CONFIG_ENV_IS_IN_FAT
|
||||
+#define CONFIG_FAT_WRITE
|
||||
+#define CONFIG_SYS_MMC_MAX_DEVICE 4
|
||||
+#define FAT_ENV_INTERFACE "mmc"
|
||||
+#define FAT_ENV_DEVICE_AND_PART "0:1"
|
||||
+#define FAT_ENV_FILE "u-boot.env"
|
||||
+#endif
|
||||
+
|
||||
+/* Create a small(ish) boot environment for FreeBSD. */
|
||||
+#ifndef CONFIG_SPL_BUILD
|
||||
+#undef CONFIG_EXTRA_ENV_SETTINGS
|
||||
+#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
+ MEM_LAYOUT_ENV_SETTINGS \
|
||||
+ CONSOLE_STDOUT_SETTINGS \
|
||||
+ "stdin=serial,usbkbd\0" \
|
||||
+ "fdtfile=%%MODEL%%.dtb\0" \
|
||||
+ "console=ttyS0,115200\0" \
|
||||
+ "Fatboot=" \
|
||||
+ "env exists loaderdev || env set loaderdev ${fatdev}; " \
|
||||
+ "env exists UserFatboot && run UserFatboot; " \
|
||||
+ "echo Booting from: ${fatdev} ${bootfile}; " \
|
||||
+ "fatload ${fatdev} ${kernel_addr_r} ${bootfile} && bootelf; " \
|
||||
+ "\0" \
|
||||
+ "Netboot=" \
|
||||
+ "env exists loaderdev || env set loaderdev net; " \
|
||||
+ "env exists UserNetboot && run UserNetboot; " \
|
||||
+ "dhcp ${kernel_addr_r} ${bootfile} && bootelf; " \
|
||||
+ "\0" \
|
||||
+ "preboot=usb start; " \
|
||||
+ "env exists bootfile || env set bootfile ubldr; " \
|
||||
+ "env exists SetupFatdev && run SetupFatdev; " \
|
||||
+ "env exists UserPreboot && run UserPreboot; " \
|
||||
+ "\0" \
|
||||
+ "SetupFatdev=" \
|
||||
+ "env exists fatdev || env set fatdev 'mmc 0'; " \
|
||||
+ "\0"
|
||||
+
|
||||
+#undef CONFIG_BOOTCOMMAND
|
||||
+#define CONFIG_BOOTCOMMAND "run Fatboot"
|
||||
+#undef CONFIG_PREBOOT
|
||||
+#define CONFIG_PREBOOT "run preboot"
|
||||
+#endif
|
||||
+
|
||||
#endif /* _SUNXI_COMMON_CONFIG_H */
|
@ -1,19 +1,19 @@
|
||||
U-Boot loader for Banana Pi M3.
|
||||
|
||||
To install this bootloader, follow the instructions in
|
||||
http://linux-sunxi.org/Bootable_SD_card#Bootloader
|
||||
To install this bootloader on an sdcard just do :
|
||||
dd if=/usr/local/share/u-boot/u-boot-sinovoip-bpi-m3/u-boot-sunxi-with-spl.bin of=/path/to/sdcarddevice bs=1k seek=8 conv=notrunc,sync
|
||||
|
||||
This version is patched so that:
|
||||
* ELF and API features are enabled.
|
||||
* The default environment is trimmed to just what's needed to boot.
|
||||
* The saveenv command writes to the file u-boot.env on the FAT partition.
|
||||
* The DTB file name is chosen based on the board model and passed to ubldr
|
||||
using the fdtfile env variable. ubldr loads the DTB from /boot/dtb/ on
|
||||
* The DTB file name is chosen based on the board model and passed to ubldr.bin
|
||||
using the fdtfile env variable. ubldr.bin loads the DTB from /boot/dtb/ on
|
||||
the FreeBSD partition.
|
||||
* By default, it loads ELF ubldr from file ubldr on the FAT partition
|
||||
* By default, it loads PIE ubldr.bin from file ubldr.bin on the FAT partition
|
||||
to address 0x42000000, and launches it.
|
||||
|
||||
For information about running FreeBSD on Banana Pi M3, see
|
||||
For information about running FreeBSD on Allwinner boards, see
|
||||
https://wiki.freebsd.org/FreeBSD/arm/Allwinner
|
||||
|
||||
For general information about U-Boot see WWW: http://www.denx.de/wiki/U-Boot
|
||||
|
Loading…
Reference in New Issue
Block a user