porting linux 5.5.3 & u-boot 2020.04-rc2 to stm32f429-discovery board

just create a outline with kernel startup log here, will add detail steps some times lateru-boot configure, compile openocd script linux configure, compile stm32 2m flash memory map use mkimag...
摘要由CSDN通过智能技术生成

2020-04-06 upload startup video

will update ltdc driver to draw on ili9341

This test was't finished yet, the logo can't be showed on the lcd when kernel startup, might be some mistake inside the code, if you find anything wrong , please feel free to contact with me , bluesky.coco@gmail.com thanks.

crosscompile toolchain

get compile tool from 

https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=108bd959-44bd-4619-9c19-26187abf5225&la=en&hash=E788CE92E5DFD64B2A8C246BBA91A249CB8E2D2D

u-boot configure, compile

get u-boot code from https://gitlab.denx.de/u-boot/u-boot

change point:

1 Makefile 

line 37   #undefine MK_ARCH

2 open CONFIG_ENV_IS_NOWHERE=y , to save 0x08040000 128k flash memory, we don't need runtime env save feature.

3 open FIT to support itb file load

     CONFIG_FIT=y
     CONFIG_FIT_EXTERNAL_OFFSET=0x0
     CONFIG_FIT_ENABLE_SHA256_SUPPORT=y

4 update cmdline

    #define CONFIG_BOOTCOMMAND                        \
    "run bootcmd_ramfs"

    #define CONFIG_EXTRA_ENV_SETTINGS \    
    "bootargs_ramfs=console=ttySTM0,115200 root=/dev/ram rdinit=/linuxrc\0" \
    "bootcmd_ramfs=setenv bootargs ${bootargs_ramfs};" \
    "bootm 0x08040000\0"

configure step :

make O=../u-boot-build ARCH=arm CROSS_COMPILE=arm-none-eabi- stm32f429-discovery_defconfig

make O=../u-boot-build

sudo apt-get install openocd

openocd -f openocd.cfg -c flash_uboot

openocd configure file, openocd.cfg

source [find board/stm32f4discovery.cfg]

init

proc flash_uboot {} {
    reset halt
    flash write_image erase u-boot-build/u-boot-dtb.bin 0x08000000

    reset init
    shutdown
}
proc flash_full {} {
    reset halt
    flash write_image erase kernel.itb 0x08040000

    reset init
    shutdown
}

its configure file, kernel.its

/*
 * Simple U-Boot uImage source file containing a single kernel and FDT blob
 */

/dts-v1/;

/ {
	description = "Simple image with single Linux kernel and FDT blob";
	#address-cells = <1>;

	images {
		kernel {
			description = "Vanilla Linux kernel";
			data = /incbin/("./kernel-build/arch/arm/boot/zImage");
			type = "kernel";
			arch = "arm";
			os = "linux";
			compression = "none";
			load = <0x90008000>;
			entry = <0x90008000>;
			hash-1 {
				algo = "crc32";
			};
			hash-2 {
				algo = "sha1";
			};
		};
		fdt-1 {
			description = "Flattened Device Tree blob";
			data = /incbin/("./kernel-build/arch/arm/boot/dts/stm32f429-disco.dtb");
			type = "flat_dt";
			arch = "arm";
			compression = "none";
			hash-1 {
				algo = "crc32";
			};
			hash-2 {
				algo = "sha1";
			};
		};
	};

	configurations {
		default = "conf-1";
		conf-1 {
			description = "Boot Linux kernel with FDT blob";
			kernel = "kernel";
			fdt = "fdt-1";
		};
	};
};

linux configure, compile

get kernel code from https://www.kernel.org/

change point:

 1 arch/arm/boot/dts/stm32f4-pinctrl.dtsi add i2c3 pin mux

i2c3_pins: i2c3@0 {
				pins {
					pinmux = <STM32_PINMUX('C', 9, AF4)>, /* I2C3_SDA */
						 <STM32_PINMUX('A', 8, AF4)>; /* I2C3_SCL */
					bias-disable;
					drive-open-drain;
					slew-rate = <3>;
				};
			};

arch/arm/boot/dts/stm32f429-disco.dts add stmpe811 touchscreen dts support

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>

reg_3p3v: regulator-3p3v {
		compatible = "regulator-fixed";
		regulator-name = "3P3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

&i2c3 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c3_pins>;
	status = "okay";

	touch: stmpe811@41 {
		compatible = "st,stmpe811";
		reg = <0x41>;
		interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
		interrupt-parent = <&gpioa>;
		vio = <&reg_3p3v>;
		vcc = <&reg_3p3v>;

		stmpe_touchscreen {
			compatible = "st,stmpe-ts";
			st,sample-time = <4>;
			st,mod-12b = <1>;
			st,ref-sel = <0>;
			st,adc-freq = <1>;
			st,ave-ctrl = <1>;
			st,touch-det-delay = <2>;
			st,settling = <2>;
			st,fraction-z = <7>;
			st,i-drive = <1>;
		};
	};
};

arch/arm/boot/dts/stm32f429.dtsi add i2c3 reg , clk, interrupts

i2c3: i2c@40005c00 {
			compatible = "st,stm32f4-i2c";
			reg = <0x40005c00 0x400>;
			interrupts = <72>,
				     <73>;
			resets = <&rcc STM32F4_APB1_RESET(I2C3)>;
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(I2C3)>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";
		};

arch/arm/boot/dts/stm32f4-pinctrl.dtsi add ltdc, spi5 pin mux

ltdc_pins_disco: ltdc@1 {
				pins {
					pinmux = 
						 <STM32_PINMUX('C', 6,  AF14)>,  /* LCD_HSYNC */
						 <STM32_PINMUX('A', 4,  AF14)>,  /* LCD_VSYNC */
						 <STM32_PINMUX('G', 7,  AF14)>,  /* LCD_CLK */
						 <STM32_PINMUX('C', 10, AF14)>,  /* LCD_R2 */
						 <STM32_PINMUX('B', 0,  AF9)>,   /* LCD_R3 */
						 <STM32_PINMUX('A', 11, AF14)>,  /* LCD_R4 */
						 <STM32_PINMUX('A', 12, AF14)>,  /* LCD_R5 */
						 <STM32_PINMUX('B', 1,  AF9)>,   /* LCD_R6*/
						 <STM32_PINMUX('G', 6,  AF14)>,  /* LCD_R7 */
						 <STM32_PINMUX('A', 6,  AF14)>,  /* LCD_G2 */
						 <STM32_PINMUX('G', 10, AF9)>,   /* LCD_G3 */
						 <STM32_PINMUX('B', 10, AF14)>,  /* LCD_G4 */
						 <STM32_PINMUX('D', 6,  AF14)>,  /* LCD_B2 */
						 <STM32_PINMUX('G', 11, AF14)>,  /* LCD_B3*/
						 <STM32_PINMUX('B', 11, AF14)>,  /* LCD_G5 */
						 <STM32_PINMUX('C', 7,  AF14)>,  /* LCD_G6 */
						 <STM32_PINMUX('D', 3,  AF14)>,  /* LCD_G7 */
						 <STM32_PINMUX('G', 12, AF9)>,   /* LCD_B4 */
						 <STM32_PINMUX('A', 3,  AF14)>,  /* LCD_B5 */
						 <STM32_PINMUX('B', 8,  AF14)>,  /* LCD_B6 */
						 <STM32_PINMUX('B', 9,  AF14)>,  /* LCD_B7 */
						 <STM32_PINMUX('F', 10, AF14)>;  /* LCD_DE */
					slew-rate = <2>;
				};
			};
			spi5_pins: spi5@0 {
				pins1 {
					pinmux = 
						 <STM32_PINMUX('F', 7, AF5)>, /* SPI5_CLK */
						 <STM32_PINMUX('F', 9, AF5)>; /* SPI5_MOSI */
					bias-disable;
					drive-push-pull;
					slew-rate = <0>;
				};
				pins2 {
					pinmux = <STM32_PINMUX('F', 8, AF5)>; /* SPI5_MISO */
					bias-disable;
				};
			};

arch/arm/boot/dts/stm32f429-disco.dts add l3gd20, ili9341 dts

panel_backlight:backlight {
		compatible = "gpio-backlight";
		gpios = <&gpiog 2 1>;
		default-on;
		status = "okay";
	};


/*bak: actually, ili9341 don't need gpio-bakclight dts node, just add here make tinydrm driver happy*/

&spi5 {
	status = "okay";
	pinctrl-0 = <&spi5_pins>;
	pinctrl-names = "default";
	#address-cells = <1>;
	#size-cells = <0>;
	cs-gpios = <&gpioc 1 GPIO_ACTIVE_LOW>,<&gpioc 2 GPIO_ACTIVE_LOW>;
	dmas = <&dma2 3 2 0x400 0x0>,
	       <&dma2 4 2 0x400 0x0>;
	dma-names = "rx", "tx";
	l3gd20: l3gd20@0 {
		compatible = "st,l3gd20-gyro";
	    spi-max-frequency = <10000000>;
	    st,drdy-int-pin = <2>;
		interrupt-parent = <&gpioa>;
		interrupts = <1 IRQ_TYPE_EDGE_RISING>,
					 <2 IRQ_TYPE_EDGE_RISING>;
	    reg = <0>;
		vddio = <&reg_3p3v>;
		vdd = <&reg_3p3v>;
	};
	display: display@1{
		compatible = "adafruit,yx240qv29", "ilitek,ili9341";
		reg = <1>;
		spi-3wire;
		spi-max-frequency = <10000000>;
		dc = <&gpiod 13 1>;
		rotation = <90>;
		backlight = <&panel_backlight>;
	};
};

6 drivers/spi/spi-stm32.c

7 kernel config change

#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 5.5.3 Kernel Configuration
#

#
# Compiler: arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 9-2019-q4-major) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]
#
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=90201
CONFIG_CLANG_VERSION=0
CONFIG_CC_HAS_ASM_GOTO=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_WARN_MAYBE_UNINITIALIZED=y
CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED=y
CONFIG_IRQ_WORK=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_COMPILE_TEST is not set
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_BUILD_SALT=""
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SYSVIPC is not set
# CONFIG_USELIB is not set
CONFIG_HAVE_ARCH_AUDITSYSCALL=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
# CONFIG_GENERIC_IRQ_DEBUGFS is not set
# end of IRQ subsystem

CONFIG_ARCH_CLOCKSOURCE_DATA=y
CONFIG_GENERIC_CLOCKEVENTS=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ is not set
CONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem

# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_PREEMPTION=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_PSI is not set
# end of CPU/Task time and stats accounting

#
# RCU Subsystem
#
CONFIG_PREEMPT_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_SRCU=y
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
# end of RCU Subsystem

# CONFIG_IKCONFIG is not set
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=16
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_GENERIC_SCHED_CLOCK=y

#
# Scheduler features
#
# end of Scheduler features

# CONFIG_CGROUPS is not set
# CONFIG_NAMESPACES is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_SYSFS_DEPRECATED is not set
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/home/th/work/stm32/filesystem/rootfs"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_INITRAMFS_COMPRESSION=".gz"
# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_HAVE_UID16=y
CONFIG_EXPERT=y
# CONFIG_UID16 is not set
CONFIG_MULTIUSER=y
# CONFIG_SGETMASK_SYSCALL is not set
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_PRINTK_NMI=y
CONFIG_BUG=y
# CONFIG_BASE_FULL is not set
# CONFIG_FUTEX is not set
# CONFIG_EPOLL is not set
# CONFIG_SIGNALFD is not set
CONFIG_TIMERFD=y
# CONFIG_EVENTFD is not set
# CONFIG_AIO is not set
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_BPF_SYSCALL is not set
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
CONFIG_RSEQ=y
# CONFIG_DEBUG_RSEQ is not set
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
# CONFIG_PC104 is not set

#
# Kernel Performance Events And Counters
#
# CONFIG_PERF_EVENTS is not set
# end of Kernel Performance Events And Counters

# CONFIG_VM_EVENT_COUNTERS is not set
# CONFIG_SLUB_DEBUG is not set
CONFIG_COMPAT_BRK=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set
# CONFIG_PROFILING is not set
# end of General setup

CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_NO_IOPORT_MAP=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_PHYS_OFFSET=0x90000000
CONFIG_GENERIC_BUG=y
CONFIG_PGTABLE_LEVELS=2

#
# System Type
#
# CONFIG_MMU is not set
CONFIG_ARCH_MMAP_RND_BITS_MIN=8
CONFIG_ARCH_MMAP_RND_BITS_MAX=16
CONFIG_ARM_SINGLE_ARMV7M=y
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_DOVE is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C24XX is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_MXC is not set
CONFIG_ARCH_STM32=y
CONFIG_MACH_STM32F429=y
CONFIG_MACH_STM32F469=y
CONFIG_MACH_STM32F746=y
CONFIG_MACH_STM32F769=y
CONFIG_MACH_STM32H743=y
# CONFIG_ARCH_EFM32 is not set
# CONFIG_ARCH_LPC18XX is not set
# CONFIG_ARCH_MPS2 is not set

#
# Processor Type
#
CONFIG_CPU_V7M=y
CONFIG_CPU_THUMBONLY=y
CONFIG_CPU_THUMB_CAPABLE=y
CONFIG_CPU_32v7M=y
CONFIG_CPU_ABRT_NOMMU=y
CONFIG_CPU_PABRT_LEGACY=y
CONFIG_CPU_CACHE_NOP=y
CONFIG_CPU_CACHE_V7M=y
CONFIG_CPU_V7M_NUM_IRQ=240

#
# Processor Features
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_BPREDICT_DISABLE is not set
CONFIG_ARM_L1_CACHE_SHIFT=5
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
CONFIG_SET_MEM_PARAM=y
CONFIG_DRAM_BASE=0x90000000
CONFIG_DRAM_SIZE=0x00800000
# CONFIG_REMAP_VECTORS_TO_RAM is not set
# CONFIG_ARM_MPU is not set
# end of System Type

#
# Bus support
#
# end of Bus support

#
# Kernel Features
#
CONFIG_PAGE_OFFSET=0x90000000
CONFIG_ARCH_NR_GPIO=0
CONFIG_HZ_FIXED=0
CONFIG_HZ_100=y
# CONFIG_HZ_200 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_500 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y
CONFIG_THUMB2_KERNEL=y
CONFIG_AEABI=y
CONFIG_HAVE_ARCH_PFN_VALID=y
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_FORCE_MAX_ZONEORDER=11
# CONFIG_SECCOMP is not set
# CONFIG_PARAVIRT is not set
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
# end of Kernel Features

#
# Boot options
#
CONFIG_USE_OF=y
# CONFIG_ATAGS is not set
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
# CONFIG_CRASH_DUMP is not set
CONFIG_AUTO_ZRELADDR=y
# end of Boot options

#
# CPU Power Management
#

#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
# end of CPU Frequency scaling

#
# CPU Idle
#
# CONFIG_CPU_IDLE is not set
# end of CPU Idle
# end of CPU Power Management

#
# Floating point emulation
#

#
# At least one emulation must be selected
#
# end of Floating point emulation

#
# Power management options
#
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
# CONFIG_SUSPEND_SKIP_SYNC is not set
CONFIG_PM_SLEEP=y
# CONFIG_PM_AUTOSLEEP is not set
# CONFIG_PM_WAKELOCKS is not set
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
# CONFIG_APM_EMULATION is not set
CONFIG_PM_CLK=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_CPU_PM=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARM_CPU_SUSPEND=y
# end of Power management options

#
# Firmware Drivers
#
# CONFIG_FIRMWARE_MEMMAP is not set
# CONFIG_GOOGLE_FIRMWARE is not set

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

# CONFIG_ARM_CRYPTO is not set
# CONFIG_VIRTUALIZATION is not set

#
# General architecture-dependent options
#
CONFIG_HAVE_OPROFILE=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_HAVE_NMI=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_GENERIC_IDLE_POLL_SETUP=y
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_HAS_KEEPINITRD=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_RSEQ=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_HAVE_STACKPROTECTOR=y
CONFIG_CC_HAS_STACKPROTECTOR_NONE=
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值