u-boot-1.1.6源码浅析(四)

U-boot源码目录结构 .....“sed –e”表示后面跟的是一串命令脚本,而表达式“s/abc/def/”表示要从标准输入中,查找到内容为“abc”的,然后替换成“def”。其中“abc”表达式用可以使用“.”作为通配符。命令“uname –m”将输出主机CPU的体系架构类型。本人使用Intel 奔腾系列的CPU,因此“uname –m”输出“i686”。 阅读详情

在这篇文字里,我就要分析一下在第一篇文字里被忽略的部分了。这部分是在$(OBJTREE)/include/config.mk文件已经存在的 情况下才执行的。
__________________________________________________

# load ARCH, BOARD, and CPU configuration
include $(OBJTREE)/include/config.mk
export ARCH CPU BOARD VENDOR SOC

ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),ppc)
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = powerpc-linux-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
ifeq ($(ARCH),i386)
ifeq ($(HOSTARCH),i386)
CROSS_COMPILE =
else
CROSS_COMPILE = i386-linux-
endif
endif
ifeq ($(ARCH),mips)
CROSS_COMPILE = mips_4KC-
endif
ifeq ($(ARCH),nios)
CROSS_COMPILE = nios-elf-
endif
ifeq ($(ARCH),nios2)
CROSS_COMPILE = nios2-elf-
endif
ifeq ($(ARCH),m68k)
CROSS_COMPILE = m68k-elf-
endif
ifeq ($(ARCH),microblaze)
CROSS_COMPILE = mb-
endif
ifeq ($(ARCH),blackfin)
CROSS_COMPILE = bfin-elf-
endif
ifeq ($(ARCH),avr32)
CROSS_COMPILE = avr32-
endif
endif
endif

export CROSS_COMPILE
____________________________________________________

注意开头一句中的include,它是把后面跟的文件内容给加到它出现的地方,这里就是把$(OBJTREE)/include /config.mk文件的内容加入到了这里,所以就得到了ARCH,BOARD与CPU的值,如果VENDOR与SOC也定义了,也会得到它们的值。

后面接着的一大段,就是在判断没有定义CROSS_COMPILE变量的情况下,根据各种情况对这个变量的值进行判断。这个值就是交叉编译工具的开 头部分的名称。如果不清楚什么是交叉编译工具,就需要查查相关的资料了。
在这里,我建议在编译的时候,还是把这个变量的值给置上,置上当前系统里 交叉编译工具相应的值,因为很难指望这些个判断就能把你现在系统里的值给判断对了。置变量的方法有-很多,其中一个,就是在make命令后跟上变量的赋 值,例如:make CROSS_COMPILE=arm-linux-gnueabi-,或是把CROSS_COMPILE设成一个系统变量,然后直接make CROSS_COMPILE=${CROSS_COMPILE}-这样来设置。
____________________________________________________

# load other configuration
include $(TOPDIR)/config.mk
____________________________________________________

这里把$(TOPDIR)/config.mk这个文件的内容包含进来了。
还有个语句需要提前说明一下,就是sinclude,它也是把后 面所跟的文件给包含进来。它与include的区别就是,include后面跟的文件,一定是存在的,如果不存在,执行就会出错误;那么sinclude 后面所跟的文件,可以不存在,如果文件存在则包含进来,如果不存在,则什么也不做。
在这里提这一句,是因为 在$(TOPDIR)/config.mk这个文件里,用到了这个命令,在这里提一下,是可以做个比较,这样便于记忆。

 

按理说,下面应该分析$(TOPDIR)/config.mk这个文件了,不过这个文件对移植的影响,源码的影响也不是特别大,所以就不做特别细致 的分析了,大概介绍一下这个文件的功能。

这个文件的功能就是给各个在编译过程中的变量赋值,包括编译执行的函数与编译的时候所带的参数等等。还会根据是否定义了 ARCH,CPU,SOC,VENDOR,BOARD来决定是否包含相应位置的config.mk文件,这些个文件里,也是定义了相应的平台在编译的时候 应该加的参数。所以如果你为你自己的开发板取了别的名字了,那么就要检查一下这个文件,看一下相应的位置上的config.mk文件有没有,内容是否为你 要想的。
____________________________________________________

OBJS  = cpu/$(CPU)/start.o
ifeq ($(CPU),i386)
OBJS += cpu/$(CPU)/start16.o
OBJS += cpu/$(CPU)/reset.o
endif
ifeq ($(CPU),ppc4xx)
OBJS += cpu/$(CPU)/resetvec.o
endif
ifeq ($(CPU),mpc83xx)
OBJS += cpu/$(CPU)/resetvec.o
endif
ifeq ($(CPU),mpc85xx)
OBJS += cpu/$(CPU)/resetvec.o
endif
ifeq ($(CPU),mpc86xx)
OBJS += cpu/$(CPU)/resetvec.o
endif
ifeq ($(CPU),bf533)
OBJS += cpu/$(CPU)/start1.o cpu/$(CPU)/interrupt.o cpu/$(CPU)/cache.o
OBJS += cpu/$(CPU)/cplbhdlr.o cpu/$(CPU)/cplbmgr.o cpu/$(CPU)/flush.o
endif

OBJS := $(addprefix $(obj),$(OBJS))

LIBS  = lib_generic/libgeneric.a
LIBS += board/$(BOARDDIR)/lib$(BOARD).a
LIBS += cpu/$(CPU)/lib$(CPU).a
ifdef SOC
LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
endif
LIBS += lib_$(ARCH)/lib$(ARCH).a
LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a /
 fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
LIBS += net/libnet.a
LIBS += disk/libdisk.a
LIBS += rtc/librtc.a
LIBS += dtt/libdtt.a
LIBS += drivers/libdrivers.a
LIBS += drivers/nand/libnand.a
LIBS += drivers/nand_legacy/libnand_legacy.a
LIBS += drivers/sk98lin/libsk98lin.a
LIBS += post/libpost.a post/cpu/libcpu.a
LIBS += common/libcommon.a
LIBS += $(BOARDLIBS)

LIBS := $(addprefix $(obj),$(LIBS))
.PHONY : $(LIBS)

# Add GCC lib
PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc

# The "tools" are needed early, so put this first
# Don't include stuff already done in $(LIBS)
SUBDIRS = tools /
   examples /
   post /
   post/cpu
.PHONY : $(SUBDIRS)

ifeq ($(CONFIG_NAND_U_BOOT),y)
NAND_SPL = nand_spl
U_BOOT_NAND = $(obj)u-boot-nand.bin
endif

__OBJS := $(subst $(obj),,$(OBJS))
__LIBS := $(subst $(obj),,$(LIBS))
____________________________________________________

这段代码,其实也是定义变量,根据不同的条件,给变量定义不同的值。这些变量都是在后面编译的时候,写到运行命令参数里面的,这些变量的意义,还有 各种参数的意义,可以查看相应的工具的参数手册来得到,由于跟移植没有什么太大的关系,就不做一一说明了。
这段代码不难理解,就是需要注意一下各 个变量值所添加的顺序,第一个添加的,编译的时候,变量进行替换,就会被放在前面,然后就会被首先编译,连接,以此类推。可以看到,最先执行的就是 start.o这个文件里的内容,这个文件是由start.S来生成的。
____________________________________________________

ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)

all:  $(ALL)

$(obj)u-boot.hex: $(obj)u-boot
  $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@

$(obj)u-boot.srec: $(obj)u-boot
  $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@

$(obj)u-boot.bin: $(obj)u-boot
  $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@

$(obj)u-boot.img: $(obj)u-boot.bin
  ./tools/mkimage -A $(ARCH) -T firmware -C none /
  -a $(TEXT_BASE) -e 0 /
  -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | /
   sed -e 's/"[  ]*$$/ for $(BOARD) board"/') /
  -d $< $@

$(obj)u-boot.dis: $(obj)u-boot
  $(OBJDUMP) -d $< > $@

$(obj)u-boot:  depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
  UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*/(__u_boot_cmd_.*/)/-u/1/p'|sort|uniq`;/
  cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) /
   --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) /
   -Map u-boot.map -o u-boot

$(OBJS):
  $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))

$(LIBS):
  $(MAKE) -C $(dir $(subst $(obj),,$@))

$(SUBDIRS):
  $(MAKE) -C $@ all

$(NAND_SPL): version
  $(MAKE) -C nand_spl/board/$(BOARDDIR) all

$(U_BOOT_NAND): $(NAND_SPL) $(obj)u-boot.bin
  cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin

version:
  @echo -n "#define U_BOOT_VERSION /"U-Boot " > $(VERSION_FILE); /
  echo -n "$(U_BOOT_VERSION)" >> $(VERSION_FILE); /
  echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion /
    $(TOPDIR)) >> $(VERSION_FILE); /
  echo "/"" >> $(VERSION_FILE)

gdbtools:
  $(MAKE) -C tools/gdb all || exit 1

updater:
  $(MAKE) -C tools/updater all || exit 1

env:
  $(MAKE) -C tools/env all || exit 1

depend dep:
  for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done

tags ctags:
  ctags -w -o $(OBJTREE)/ctags `find $(SUBDIRS) include /
    lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) /
    fs/cramfs fs/fat fs/fdos fs/jffs2 /
    net disk rtc dtt drivers drivers/sk98lin common /
   /( -name CVS -prune /) -o /( -name '*.[ch]' -print /)`

etags:
  etags -a -o $(OBJTREE)/etags `find $(SUBDIRS) include /
    lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) /
    fs/cramfs fs/fat fs/fdos fs/jffs2 /
    net disk rtc dtt drivers drivers/sk98lin common /
   /( -name CVS -prune /) -o /( -name '*.[ch]' -print /)`

$(obj)System.map: $(obj)u-boot
  @$(NM) $< | /
  grep -v '/(compiled/)/|/(/.o$$/)/|/( [aUw] /)/|/(/./.ng$$/)/|/(LASH[RL]DI/)' | /
  sort > $(obj)System.map

______________________________________________________

这里就是定义了各种目标的target。我们最终想要的目标就是$(obj)u-boot,然后看后面的,它都信赖了好多其它的目标,然后这些个目 标,也是在此处定义的,然后有相应的$(MAKE)来执行相应的操作,所以这样就实现了一个Makefile文件,套很多个其它的Makefile文件来 编译整个工程的情况。


现在整个编译的过程就分析清楚了,那么开始移植就是对代码的整个熟悉的过程了。最先开始执行的就是start.S的内容,移值就需要先分析 它。
其实要想自己写这样的一个文件,难度还是比较大的,首先要熟悉这种比较特别的汇编语法,然后需要了解与处理器相关的各种状态寄存器的定义。但 是如果只是做修改,难度就小多了,拿着ARM处理器汇编语言的手册,再参考三星提供的S3C2440的板子的说明,一步步检查源码,修改相应的参数,以符 合自己的板子的需要就行了,如果有兴趣,也可以弄清楚各种参数的具体的意义,各种状态寄存器的格式定义,这也是比较有意思的。

我自己的移植也刚则开始,目前还没有遇到很棘手的问题,现在最担心的,就是我买的开发板上的各种重要的状态寄存器的地址与S3C2440这块板子上 的不一样,因为我的这块板子也没有相应的说明书,只给了三星的S3C2440的说明书,万一不一致,我就完蛋了,希望这种局面不要发生,阿门。

等我自己的u-boot移植成功后,我就要去给自己找个嵌入式相关的工作了,实在比较喜欢这个行当的这种比较富有挑战性的工作,哈哈哈哈:)

现在这系列的文章,暂时告一段落,已经写完的,算是一个上部吧,等我自己的移植工作做完了,我就开始接着写u-boot-1.1.6源码浅析 (五),从五开始,就要分析源码的具体的内容了,只要于移植相关的,都会做出说明,包括各种寄存器的状态的定义,至于会告诉你去哪里查这个东西,怎么查, 怎么看明白。
好了,这系列的说明上部,就到此为止,再见。

imx6ull-系统移植篇1——U-Boot使用体验 本文介绍了在imx6ull开发板上移植U-Boot的过程。详细说明了U-Boot编译步骤、分析了uboot启动时输出的关键信息. 阅读详情

相关推荐

2.1【Linux系统移植之一】:移植U-Boot(制作u-boot.bin文件)

文章目录一、下载源码、编译源码二、修改源码(适配自己的开发板)2.1 拷贝配置文件2.2 拷贝头文件2.3 拷贝开发板对应板级文件夹三、编译新的U-Boot(自己开发板的U-Boot)四、烧写U-Boot到SD卡,启动U-Boot五、U-Boot命令 备注:本文以正点原子imx6ull芯片Alpha开发板为例。参考《正点原子嵌入式linux驱动开发指南V1.4.pdf》整理的笔记。 一、下载源码、编译源码 该步骤的作用是:测试源码是否可以正常编译 ARM芯片官网下载对应的U-BOOT,并解压 tar

Ace's Blog 4685

uboot 顶层makefile细节分析

    uboot的源文件众多,学习庞然大物首先找到脊椎--顶层的makfile,逐一破解。但是,uboot的makefile同样是一个庞然大物,所以也要找到它的主线。倘若过分专注部分细节,很难做到把握全局,实际上也不可能很好理解细节。     介于此,笔者已经写了一篇uboot makefile整体解析,可以先从主体上把握makefile。然后,再读这篇makefile强大功能实现的细节,才能...

weixin_34409703的博客 294

imx6ull移植Linux系统第一篇——U-Boot的移植

imx6ull移植Linux系统第一篇——U-Boot的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot、系统镜像、设备树以及根文件系统的制作,并最终下载到开发板上运行。这里想对这两周的学习内容进行一个总结,因为后期会有其他的学习安排,系统移植是一些经验和方法的掌握,如果长时间不去用,时间久了肯定会忘,希望这里写的总结会对后期的移植工作给出一些方法上的参考。 提示:本系列文档共分四篇:U-Boot的移植、Linux内核的

qq_40380893的博客 3506

深入 Android 源码系列(一)

首先,每天看到不断有新人关注着这个公众号,心情很是愉悦。一种认可,一种信任,也是我前进的动力。感谢大家的支持与鼓励。   本文讲解内容有     loadLibrary流程      linker      ELF     ndk开发以及配置调试版本     ndk-gdb –start调试so     gdb 调试bin文件  gdb调试android apk方案关于本文讲

程序员入门进阶 4431

DM6467开发之U-Boot移植(1)——U-Boot学习

1        DM6467启动流程 在移植U-Boot之前,首先需要了解DM6467的启动流程,知道U-Boot在系统启动过程中的位置及作用。DM6467标准的启动过程如图 1‑1所示,主要包括四个步骤:RBL(ROM BootLoader)→UBL(User Boot Loader)→U-Boot →Linux内核。 图1‑1 DM6467启动流程 系统上电时,首先运行的是

hyanglu1573的专栏 5034

U-Boot重点源码详解

文件夹就是和具体的板子有关的,打开此文件夹,里面全是不同的板子,毫无疑问正点原子的开发板肯定也在里面(其中imxdownload是烧录文件 u-boot*这些文件是编译产生的。这个文件夹里面的文件都是跟 ARMV7。,只是freescale 后来被。芯片的板子都放到此文件夹中,可以看出有很多架构,比如。文件夹,在里面找到和。的时候需要重点关注的。文件夹里面有个名为“

weixin_41199566的博客 1420

uboot分析

前面生成了.config,但是它不是最终版本的配置文件。u-boot.cfg 是配置的集大成者。u-boot.cfg来自:.config头文件include/common.h,又包含了"#include "

weixin_46090853的博客 1111

深入解析u-boot-1.1.6源码与应用

U-Boot是一个广泛应用于嵌入式系统中的开源引导加载程序(bootloader),它的主要作用是在嵌入式设备上电或复位后,负责初始化硬件设备、建立内存空间的映射图,从而为操作系统的加载和运行提供准备环境。U-Boot以其丰富的硬件支持、高度可配置性及活跃的社区支持,在各种ARM、PowerPC、MIPS等架构的处理器上得到广泛应用。在本章中,我们将首先对U-Boot进行总体概述,随后对它的基本特性和应用背景进行深入探讨,为读者们构建起对U-Boot的初步认识。

weixin_35754676的博客 1200

U-Boot 目录结构和编译过程

  本文是基于u-boot-04.04.00.01进行分析,硬件平台基于DM8168 (Cortex-A8+ DSP +M3(视频处理子系统)) 一. U-Boot 目录结构   1.board  本目录存放与已有开发板相关的文件。每种开发板有一个子目录,子目录仅存放与开发板相关的c文件和配置文件,不包含开发板CPU架构通用的实现文件。  每个目录下...

weixin_30569153的博客 367

告别Godot默认编辑器:手把手教你用VSCode配置C#开发环境(附中文注释避坑指南)

本文详细介绍了如何将VSCode配置为Godot引擎的C#开发环境,提升游戏开发效率。从环境准备、扩展配置到解决中文编码问题,提供完整的避坑指南和高级调试技巧,帮助开发者充分利用VSCode的智能补全和调试功能,打造高效工作流。

weixin_30596023的博客 189

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2481

学习一个 Linux 命令:objcopy 命令

点击上方 "编程技术圈"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!每日英文Once in your world, I lost himself; withou...

程序员小乐 1665

华为iTrustee实战:5分钟搞定TrustZone环境搭建(附BoostKit配置技巧)

本文提供了一份华为iTrustee与ARM TrustZone环境的5分钟快速搭建实战指南。详细介绍了在TaiShan服务器上利用鲲鹏BoostKit套件部署可信执行环境(TEE)的完整流程,包括环境检查、驱动安装、首个可信应用(TA)的编译与运行,并分享了关键的BoostKit配置技巧与深度排错方法,助力开发者快速为业务注入硬件级安全能力。

yoga7的博客 968

U-Boot 浅析

U-boot介绍

安迪西_嵌入式攻城狮 5267

大尺寸智能车的CAN驱动控制器制作(一)

本驱动板使用8个半H桥BTS7960驱动,使用CAN接口于车体主控制器通讯,最大承受电压48V 电流20A ,主控为STM32F103VET6,电机控制频率为18KHz,CAN通讯芯片为TJA1042T,全驱动板6-24V宽电压供电,采用24V降5V,5V降3.3V的方案供电,其中经过AMS1117作为降压芯片,可以有效降低主控损毁几率。在这里可以看到555电机相比于其他电机的功率大很多,所以需要大功率的电机驱动,在以往的电机驱动选型中选择了TB6612,L298N等小功率电机驱动。

技术的力量能够改变世界 569

TMS320F280049C 学习笔记4 Led_ex1_blinky 初始化函数及系统时钟

承接上一篇学习笔记,这次开始实际运行例程。本文概述了280049C的第一个实验 Led灯闪烁。同时也总结了系统的初始化函数和时钟配置。

whyorwhnt的专栏 7031

u-boot源码分析

u-boot源码分析

小王的博客 6809

RFSOC实战解析:MTS多片同步的时序校准与相位相干实现

本文深入解析了在RFSOC平台上实现MTS多片同步的关键技术与实战流程。文章从相位相干的重要性出发,详细阐述了SYSREF与SYNC信号的协同工作机制,并提供了从硬件时钟配置到软件API调用的完整MTS实现步骤。重点探讨了时序校准的核心方法,旨在帮助工程师解决多通道系统相位不一致的难题,确保ADC与DAC达到精确的相位相干,从而构建高性能的MIMO和相控阵系统。

weixin_29206669的博客 192

u-boot-1.1.6源码浅析(一)

<br />之前买了块开发板,用来学习嵌入式的东西。后来自己制作了自己的交叉编译工具,然后编译了最新的u-boot-1.1.6,烧到板子里后 启动不起来,这才知道搞bootloader的移植,不是这么容易的。而且要想调试方便,就得买一个仿真器。<br />好多人都建议我在上层开发,别管底下的东西,可是我觉得,既然买了这块板子,就要从头到尾了解它,驱动程序这块可以暂时不管,但是与硬件相关的启动 部分不能不管,如果这块也不管的话,那就跟在linux环境下写普通程序,没什么太大的差别了。当然,这只是我现阶段的

heaiding的专栏 914

智能小车倒车入库功能的实现(python,cpp,ubuntu)

智能小车倒车入库功能的实现(python,cpp,ubuntu)

weixin_62135607的博客 5793

小程序跳转链接实战:https://wxaurl.cn/、weixin://dl/business/ 跳转与明文 URL Scheme 生成指南

本文聚焦小程序跳转链接开发核心技术,深入解析 https://wxaurl.cn/*TICKET* 与 weixin://dl/business/?t= *TICKET* 两种链接的生成方法。详细阐述生成前的准备工作、服务端接口调用步骤及注意事项,同时剖析 iOS 与 Android 系统在链接适配方面的差异。此外,针对明文 URL Scheme 获取,从平台设置、拼接规则、使用限制等方面展开讲解,并结合实际应用案例提出优化建议,帮助开发者快速掌握小程序跳转链接生成与明文URL Scheme获取的关键技术。

邓邓子的博客 2万+

【嵌入式移植】4、U-Boot源码分析1—Makefile

第257行~261行,定义HOSTCCHOSTCXXHOSTCFLAGS4个变量后续第263行~295行,判断HOSTOS是否为cygwin或者darwin,将对上述变量值进行修改,这里,因此上述变量值不变,最终为第300行~326行,对KBUILD_SRC变量进行赋值结合前述分析,最终值为。

TTZZWWW 1178

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

编译IMX6ULL的u-boot和kernel源码

准备工作 下载交叉编译工具和源码(可以在网盘下载) U-boot源码:u-boot-2016.03-svn351-Release.20190128.tar.bz2 Kernel源码:linux-4.1.15-20190424.ea5a2b5.tar.bz2 交叉编译工具:fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-tool...

qq_41903418的博客 998

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

6.1 U-boot的使用

由于Ubuntu出现了一些问题,后面都是使用正点原子官方版本。

Toutiegongzhu的博客 1258

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【U-Boot笔记整理】U-Boot 完全分析与移植

【U-Boot笔记整理】U-Boot 完全分析与移植

qq_23174771的博客 3404
上一篇: u-boot-1.1.6源码浅析(三)
下一篇: u-boot 1.1.6 mkconfig源码注释( 请勿转载 )
heaiding
博客等级 码龄16年 10粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值