How to compile BPI-M3-bsp kernel on BPI-M3

1,at first download code

git clone https://github.com/BPI-SINOVOIP/BPI-M3-bsp.git

2, Add depend package

apt-get install git build-essential libncurses5-dev

3.edit BPI-M3-bsp/Makefile delete the cross compiler options

.PHONY: all clean help
 .PHONY: u-boot kernel kernel-config
 .PHONY: linux pack
 include chosen_board.mk
 SUDO=sudo
 #unmark for use new toolchain , this time just for KERNEL TEST ONLY
 #DONOT USE FOR UBOOT this time, 
 #due to allwinner UBOOT release without some source code issue. 
 OUTPUT_DIR=$(CURDIR)/output
 U_CONFIG_H=$(U_O_PATH)/include/config.h
 K_DOT_CONFIG=$(K_O_PATH)/.config
 LICHEE_KDIR=$(CURDIR)/linux-sunxi
 ROOTFS=$(CURDIR)/rootfs/linux/default_linux_rootfs.tar.gz
 Q=
 J=$(shell expr `grep ^processor /proc/cpuinfo  | wc -l` \* 2)
 all: bsp
 ## DK, if u-boot and kernel KBUILD_OUT issue fix, u-boot-clean and kernel-clean
 ## are no more needed
 clean: u-boot-clean kernel-clean
 rm -f chosen_board.mk
 ## pack
 pack: sunxi-pack
 $(Q)scripts/mk_pack.sh
 # u-boot
 $(U_CONFIG_H): u-boot-sunxi
 $(Q)$(MAKE) -C u-boot-sunxi $(UBOOT_CONFIG)_config  -j$J
 u-boot: $(U_CONFIG_H)
 $(Q)$(MAKE) -C u-boot-sunxi all  -j$J
 u-boot-clean:
 rm -f sunxi-pack/chips/sun8iw6p1/bin/u-boot-sun8iw6p1.bin
 rm -f u-boot-sunxi/tools/sunxi_env_gen
 $(Q)$(MAKE) -C u-boot-sunxi  -j$J distclean
 ## linux
 $(K_DOT_CONFIG): linux-sunxi
 $(Q)$(MAKE) -C linux-sunxi ARCH=arm $(KERNEL_CONFIG)
 kernel: $(K_DOT_CONFIG)
 $(Q)$(MAKE) -C linux-sunxi ARCH=arm  -j$J INSTALL_MOD_PATH=output uImage modules
 $(Q)$(MAKE) -C linux-sunxi/modules/gpu  ARCH=arm LICHEE_KDIR=${LICHEE_KDIR}
 $(Q)$(MAKE) -C linux-sunxi ARCH=arm  -j$J INSTALL_MOD_PATH=output modules_install
 $(Q)$(MAKE) -C linux-sunxi ARCH=arm  -j$J headers_install
 #cd linux-sunxi && ${K_CROSS_COMPILE}objcopy -R .note.gnu.build-id -S -O binary vmlinux bImage
 kernel-clean:
 $(Q)$(MAKE) -C linux-sunxi/arch/arm/mach-sunxi/pm/standby ARCH=arm  clean
 $(Q)$(MAKE) -C linux-sunxi/modules/gpu  ARCH=arm LICHEE_KDIR=${LICHEE_KDIR} clean
 $(Q)$(MAKE) -C linux-sunxi ARCH=arm  -j$J distclean
 rm -rf linux-sunxi/output/
 rm -f linux-sunxi/bImage
 kernel-config: $(K_DOT_CONFIG)
 $(Q)$(MAKE) -C linux-sunxi ARCH=arm  -j$J menuconfig
 cp linux-sunxi/.config linux-sunxi/arch/arm/configs/$(KERNEL_CONFIG)
 ## bsp
 bsp: u-boot kernel
 ## linux
 linux: 
 $(Q)scripts/mk_linux.sh $(ROOTFS)
 help:
 @echo ""
 @echo "Usage:"
 @echo "  make bsp             - Default 'make'"
 @echo "  make linux         - Build target for linux platform, as ubuntu, need permisstion confirm during the build process"
 @echo "   Arguments:"
 @echo "    ROOTFS=            - Source rootfs (ie. rootfs.tar.gz with absolute path)"
 @echo ""
 @echo "  make pack            - pack the images and rootfs to a PhenixCard download image."
 @echo "  make clean"
 @echo ""
 @echo "Optional targets:"
 @echo "  make kernel           - Builds linux kernel"
 @echo "  make kernel-config    - Menuconfig"
 @echo "  make u-boot          - Builds u-boot"
 @echo ""

4.eidt BPI-M3-bsp/linux-sunxi/arch/arm/mach-sunxi/pm/standby/Makefile

find here

always  := standby.code resume1.code
targets := standby.elf resume1.elf

and add

hostprogs-y := mksunxichecksum 

change 103、104 line to

$(obj)/resume1.code: $(obj)/resume1.bin $(obj)/mksunxichecksum
$(obj)/mksunxichecksum $(obj)/resume1.bin $(obj)/super/resume/resume1.code
  1. at BPI-M3-bsp/linux-sunxi/arch/arm/mach-sunxi/pm/standby/ dir add file: mksunxichecksum.c as below:
/*
 * (C) Copyright 2015 Jean-Francois Moine
 * (C) Copyright 2014 Henrik Nordstrom
 *
 * Based on mksunxiboot
 *
 * (C) Copyright 2007-2011
 * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
 *
 * SPDX-License-Identifier: GPL-2.0+
 */
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
 #include <stdint.h>
 #include <stdlib.h>
 /* boot head definition from sun4i boot code */
 struct boot_file_head {
 uint32_t b_instruction; /* one intruction jumping to real code */
 uint8_t magic[8]; /* ="eGON.BT0" or "eGON.BT1", not C-style str */
 uint32_t check_sum; /* generated by PC */
 uint32_t length; /* generated by PC */
 /*
   * We use a simplified header, only filling in what is needed
   * for checksum calculation.
   */
 };
 #define STAMP_VALUE                     0x5F0A6C39
 /* check sum functon from sun4i boot code */
 static int gen_check_sum(struct boot_file_head *head_p)
 {
 uint32_t length;
 uint32_t *buf;
 uint32_t loop;
 uint32_t i;
 uint32_t sum;
 length = head_p->length;
 // if ((length & 0x3) != 0) /* must 4-byte-aligned */
 //  return -1;
 buf = (uint32_t *)head_p;
 head_p->check_sum = STAMP_VALUE; /* fill stamp */
 loop = length >> 2;
 /* calculate the sum */
 for (i = 0, sum = 0; i < loop; i++)
   sum += buf;
 /* write back check sum */
 head_p->check_sum = sum;
 return 0;
 }
 int main(int argc, char *argv[])
 {
 struct boot_file_head h, *buf;
 unsigned file_size;
 FILE *f;
 if (argc != 3) {
   printf("Usage: %s file.bin file.code\n"
          "calculates BROM checksum in boot header of given .bin file and writes to .code file\n"
          "", argv[0]);
   exit(1);
 }
 f = fopen(argv[1], "rb");
 if (!f) {
   perror("Open input file");
   exit(1);
 }
 fread(&h, 1, sizeof h, f);
 file_size = h.length;   // wanted length
 buf = malloc(file_size);
 memset(buf, 0xff, file_size);
 rewind(f);
 fread(buf, 1, file_size, f);
 fclose(f);
 gen_check_sum(buf);
 f = fopen(argv[2], "wb");
 if (!f) {
   perror("Open output file");
   exit(1);
 }
 fwrite(buf, 1, file_size, f);
 fclose(f);
 return 0;
 }

save and exit.

run

./build.sh

compile : 1(1-6) choose compile : 3(1-6) begin to compile .

After the completion of the copy Uimage to boot partition boot/BPI m3 below

results matching ""

    No results matching ""