U-Boot源码目录分析(VScode工程创建及文件夹过滤)

参考:U-Boot工程目录介绍
作者:一只青木呀
发布时间: 2020-10-21 14:47:30
网址:https://blog.csdn.net/weixin_45309916/article/details/109199081

目录

  • 0、Uboot下载编译
  • VScode工程创建及文件夹过滤
  • 2、重要文件
    • 2.1、arch文件夹(架构)
    • 2.2、 board 文件夹(板子)
    • 2.3、 configs 文件夹(defconfig树莓派内核移植学过)
    • 2.4、 .u-boot.xxx_cmd 文件
    • 2.5、 Makefile 文件
    • 2.6、 u-boot.xxx 文件
    • 2.7、 .config 文件(make xxx_defconfig生成)
    • 2.8、 net文件
    • 2.9、 README

上一章我们详细的讲解了uboot 的使用方法,其实就是各种命令的使用,学会uboot 使用以后就可以尝试 移植uboot 到自己的开发板上了,但是在移植之前需要我们得 ①先分析一遍uboot的启动流程源码,②捋一下uboot 的启动流程,否则移植的时候都不知道该修改那些文件。本章我们就来分析一下正点原子提供的uboot 源码,重点是分析uboot 启动流程,而不是整个uboot
源码,uboot 整个源码非常大,我们只看跟我们关心的部分即可。

这里是引用

0、Uboot下载编译

首先得下载好uboot文件,并进行编译。

uboot下载:https://blog.csdn.net/weixin_45309916/article/details/109176510

进行编译后再进行分析

编译后的文件
在这里插入图片描述
编译后的文件夹及其文件含义:

类型名字描述备注
文件夹api与硬件无关的API函数uboot自带
文件夹arch(架构)与架构有关的代码uboot自带
文件夹board不同板子(开发板)的定制代码uboot自带
文件夹cmd命令相关代码uboot自带
文件夹common通用代码uboot自带
文件夹config配置文件uboot自带
文件夹disk与磁盘分区相关代码uboot自带
文件夹doc文档uboot自带
文件夹drivers驱动代码uboot自带
文件夹dts设备树uboot自带
文件夹example示例代码uboot自带
文件夹fs文件系统uboot自带
文件夹include头文件数uboot自带
文件夹lib与库文件uboot自带
文件夹Licenses许可证相关文件uboot自带
文件夹net网络相关文件uboot自带
文件夹post上电自检程序uboot自带
文件夹scripts脚本文件uboot自带
文件夹test测试代码uboot自带
文件夹tools工具文件夹uboot自带
文件.config配置文件,重要的文件编译成成的文件
文件.gitignoregit工具相关文件uboot自带
文件.mailmap邮件列表uboot自带
文件.u-boot.xxx.cmd(一系列)这是一系列的文件,用于保存着一些命令编译生成的文件
文件config.mk某个Makefile会调用此文件uboot自带
文件Kbuild用于生成一些和汇编有关的文件。uboot自带
文件Kconfig图形配置界面描述文件uboot自带
文件MAINTAINERS维护者联系方式文件uboot自带
文件MAKEALL一个shell脚本,帮助生成uboot的uboot自带
文件Makefile主 Makefile,重要文件!uboot自带
文件README相当于帮助文档。uboot自带
文件System.map系统映射文件编译成成的文件
文件u-boot系统映射文件编译成成的文件
文件u-boot.xxx(一系列)生成的一些 u-boot 相关文件,包括u-boot.bin、 u-boot.imx.等编译成成的文件

上表中的很多文件夹和文件我们都不需要去关心,我们要关注的文件夹或文件如下:

VScode工程创建及文件夹过滤

先在Ubuntu 下编译一下uboot,然后将编译后的uboot 文件夹复制到windows 下,并创建VScode 工程。打开VScode,选择:文件->打开文件夹…,选中uboot 文件夹,如图31.2.1 所示:
在这里插入图片描述

打开uboot 目录以后,VSCode 界面如图31.2.2 所示:

在这里插入图片描述
点击“文件->将工作区另存为…”,打开保存工作区对话框,将工作区保存到uboot 源码根目录下,设置文件名为“uboot”,如图31.2.3 所示:
在这里插入图片描述

保存成功以后就会在uboot 源码根目录下存在一个名为uboot.code-workspace 的文件。这样一个完整的VSCode 工程就建立起来了。但是这个VSCode 工程包含了uboot 的所有文件,uboot中有些文件是不需要的,比如arch 目录下是各种架构的文件夹,如图31.2.4 所示:
在这里插入图片描述
在arch 目录下,我们只需要arm 文件夹,所以需要将其它的目录从VSCode 中给屏蔽掉,比如将arch/avr32 这个目录给屏蔽掉。
在VSCode 上建名为“.vscode”的文件夹,如图31.2.5 所示:

在这里插入图片描述
输入新建文件夹的名字,完成以后如图31.2.6 所示。

在这里插入图片描述

在.vscode 文件夹中新建一个名为“settings.json”的文件,然后在settings.json 中输入如下内容:

1 {
2 "search.exclude": {
3 "**/node_modules": true,
4 "**/bower_components": true,
5 },
6 "files.exclude": {
7 "**/.git": true,
8 "**/.svn": true,
9 "**/.hg": true,
10 "**/CVS": true,
11 "**/.DS_Store": true,
12 }
13 }

结果如图31.2.7 所示:

在这里插入图片描述
其中"search.exclude"里面是需要在搜索结果中排除的文件或者文件夹,"files.exclude"是左侧工程目录中需要排除的文件或者文件夹。我们需要将arch/avr32 文件夹下的所有文件从搜索结果和左侧的工程目录中都排除掉,因此在"search.exclude"和"files.exclude"中输入如图31.2.8 所示内容:

在这里插入图片描述
保存一下settings.json 文件,然后再看一下左侧的工程目录,发现arch 目录下没有avr32 这个文件夹了,说明avr32 这个文件夹被排除掉了,如图31.2.9 所示:
在这里插入图片描述
我们只是在"search.exclude"和"files.exclude"中加入了:“arch/avr32”: true,冒号前面的是要排除的文件或者文件夹,冒号后面为是否将文件排除,true 表示排除,false 表示不排除。用这种方法即可将不需要的文件,或者文件夹排除掉,对于本章我们分析uboot 而言,"search.exclude"和"files.exclude"中需要输入的完成的内容如下:

1 "**/*.o":true,
2 "**/*.su":true,
3 "**/*.cmd":true,
4 "arch/arc":true,
5 "arch/avr32":true,
6 "arch/blackfin":true,
7 "arch/m68k":true,
8 "arch/microblaze":true,
9 "arch/mips":true,
10 "arch/nds32":true,
11 "arch/nios2":true,
12 "arch/openrisc":true,
13 "arch/powerpc":true,
14 "arch/sandbox":true,
15 "arch/sh":true,
16 "arch/sparc":true,
17 "arch/x86":true,
18 "arch/arm/mach*":true,
19 "arch/arm/cpu/arm11*":true,
20 "arch/arm/cpu/arm720t":true,
21 "arch/arm/cpu/arm9*":true,
22 "arch/arm/cpu/armv7m":true,
23 "arch/arm/cpu/armv8":true,
24 "arch/arm/cpu/pxa":true,
25 "arch/arm/cpu/sa1100":true,
26 "board/[a-e]*":true,
27 "board/[g-z]*":true,
28 "board/[0-9]*":true,
29 "board/[A-Z]*":true,
30 "board/fir*":true,
31 "board/freescale/b*":true,
32 "board/freescale/l*":true,
33 "board/freescale/m5*":true,
34 "board/freescale/mp*":true,
35 "board/freescale/c29*":true,
36 "board/freescale/cor*":true,
37 "board/freescale/mx7*":true,
38 "board/freescale/mx2*":true,
39 "board/freescale/mx3*":true,
40 "board/freescale/mx5*":true,
41 "board/freescale/p*":true,
42 "board/freescale/q*":true,
43 "board/freescale/t*":true,
44 "board/freescale/v*":true,
45 "configs/[a-l]*":true,
46 "configs/[n-z]*":true,
47 "configs/[A-Z]*":true,
48 "configs/M[a-z]*":true,
49 "configs/M[A-Z]*":true,
50 "configs/M[0-9]*":true,
51 "configs/m[a-w]*":true,
52 "configs/m[0-9]*":true,
53 "configs/[0-9]*":true,
54 "include/configs/[a-l]*":true,
55 "include/configs/[n-z]*":true,
56 "include/configs/[A-Z]*":true,
57 "include/configs/m[a-w]*":true,

上述代码用到了通配符“ * ”,比如 “ * * / * .o”表示所有.o 结尾的文件。“configs/[a-l] *”表示configs 目录下所有以‘a’~‘l’开头的文件或者文件夹。上述配置只是排除了一部分文件夹,大家在实际的使用中可以根据自己的实际需求来选择将哪些文件或者文件夹排除掉。排除以后我们的工程就会清爽很多,搜索的时候也不会跳出很多文件了。

2、重要文件

2.1、arch文件夹(架构)

这个文件夹里面存放着和架构有关的文件,如下图所示:
在这里插入图片描述
从上图可以看出有很多架构,比如 arm、 avr32、 m68k 等,我们现在用的是 ARM 芯片,所以只需要关心 arm 文件夹即可,打开 arm 文件夹里面内容如下图所示:

在这里插入图片描述
mach 开头的文件夹是跟具体的设备有关的,比如“mach-exynos”就是跟三星的 exyons 系列 CPU 有关的文件、还有树莓派使用的mach-bcm283x。我们使用的是 I.MX6ULL,所以要关注“imx-common”这个文件夹。另外“cpu”这个文件夹也是和 cpu 架构有关的,打开以后如下图所示:

在这里插入图片描述
从上图可以看出有多种 ARM 架构相关的文件夹, I.MX6ULL 使用的 Cortex-A7 内核,Cortex-A7 属于 armv7,所以我们要关心“armv7”这个文件夹。 cpu 文件夹里面有个名为“uboot.lds”的链接脚本文件,这个就是 ARM 芯所使用的 u-boot 链接脚本文件! armv7 这个文件夹里面的文件都是跟 ARMV7 架构有关的,是我们分析 uboot 启动源码的时候需要重点关注的,里面还有一些dts设备树文件信息。

2.2、 board 文件夹(板子)

board 文件夹就是和具体的板子有关的,打开此文件夹,里面全是不同的板子,毫无疑问正点原子的开发板肯定也在里面(正点原子添加的), borad 文件夹里面有个名为“freescale”的文件夹(恩智浦里找不到,I.MX6ull以前是属于飞思卡尔的),如下图所示:
在这里插入图片描述
所有使用 freescale 芯片的板子都放到此文件夹中, I.MX 系列以前属于 freescale,只是freescale 后来被 NXP 收购了。打开此 freescale 文件夹,在里面找到和 mx6u(I.MX6UL/ULL)有关的文件夹,如下图所示:
在这里插入图片描述
上图中有 5 个文件夹,这 5 个文件夹对应 5 种板子,以“mx6ul”开头的表示使用I.MX6UL 芯片的板子,以 mx6ull 开头的表示使用 I.MX6ULL 芯片的板子。 mx6ullevk 是 NXP官方的I.MX6ULL开发板,正点原子的ALPHA开发板就是在这个基础上开发的,因此mx6ullevk也是正点原子的开发板。我们后面移植 uboot 到时候就是参考 NXP 官方的开发板,也就是要参考 mx6ullevk 这个文件夹来定义我们的板子。

2.3、 configs 文件夹(defconfig树莓派内核移植学过)

此文件夹为 uboot 配置文件, uboot 是可配置的,但是你要是自己从头开始一个一个项目的配置,那就太麻烦了,因此一般半导体或者开发板厂商都会制作好一个配置文件。我们可以在这个做好的配置文件基础上来添加自己想要的功能,这些半导体厂商或者开发板厂商制作好的配置文件统一命名为“xxx_defconfig”, xxx 表示开发板名字,这些 defconfig 文件都存放在 configs文件夹,因此, NXP 官方开发板和正点原子的开发板配置文件肯定也在这个文件夹中,如下图所示:
在这里插入图片描述
上图中文件就是正点原子 I.MX6U-ALPHA 开发板所对应的 uboot 默认配置文件。我们只关心 mx6ull_14x14_ddr512_emmc_defconfig 和 mx6ull_14x14_ddr256_nand_defconfig这两个文件,分别是正点原子 I.MX6ULL EMMC 核心板和 NAND 核心板的配置文件。使用“make xxx_defconfig”命令即可配置 uboot,比如:

make mx6ull_14x14_ddr512_emmc_defconfig

上述命令就是配置正点原子的 I.MX6ULL EMMC 核心板所使用的 uboot。

在编译 uboot 之前一定要使用 defconfig 来配置 uboot!

在 mx6ull_alientek_emmc.sh 中就有下面这一句:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig

这个就是调用 mx6ull_14x14_ddr512_emmc_defconfig 来配置 uboot,只是这个命令还带了一些其它参数而已。

2.4、 .u-boot.xxx_cmd 文件

.u-boot.xxx_cmd 是一系列的文件,这些文件都是编译生成的,都是一些命令文件,比如文件.u-boot.bin.cmd,看名字应该是和 u-boot.bin 有关的,此文件的内容如下:

 cmd_u-boot.bin := cp u-boot-nodtb.bin u-boot.bin

.u-boot.bin.cmd 里面定义了一个变量: cmd_u-boot.bin,此变量的值为“cp u-boot-nodtb.binu-boot.bin”,也就是拷贝一份 u-boot-nodtb.bin 文件,并且重命名为 u-boot.bin,这个就是 u-boot.bin的来源,来自于文件 u-boot-nodtb.bin。

那 么 u-boot-nodtb.bin 是 怎 么 来 的 呢 ? 文 件 .u-boot-nodtb.bin.cmd 就 是 用 于 生 成 uboot.nodtb.bin 的,此文件内容如下:

cmd_u-boot-nodtb.bin := arm-linux-gnueabihf-objcopy --gap-fill=0xff -j 
.text -j .secure_text -j .rodata -j .hash -j .data -j .got -j .got.plt -j 
.u_boot_list -j .rel.dyn -O binary u-boot u-bootnodtb.bin

这里用到了 arm-linux-gnueabihf-objcopy,使用 objcopy 将 ELF 格式的 u-boot 文件转换为二进制的 u-boot-nodtb.bin 文件。

文件 u-boot 是 ELF 格式的文件,文件.u-boot.cmd 用于生成 u-boot,文件内容如下:

cmd_u-boot := arm-linux-gnueabihf-ld.bfd -pie --gc-sections -
Bstatic -Ttext 0x87800000 -o u-boot -T u-boot.lds
arch/arm/cpu/armv7/start.o --start-group arch/arm/cpu/built-in.o
arch/arm/cpu/armv7/built-in.o arch/arm/imx-common/built-in.o
arch/arm/lib/built-in.o board/freescale/common/built-in.o
board/freescale/mx6ull_alientek_emmc/built-in.o cmd/built-in.o
common/built-in.o disk/built-in.o drivers/built-in.o
drivers/dma/built-in.o drivers/gpio/built-in.o drivers/i2c/builtin.o drivers/mmc/built-in.o drivers/mtd/built-in.o
drivers/mtd/onenand/built-in.o drivers/mtd/spi/built-in.o
drivers/net/built-in.o drivers/net/phy/built-in.o drivers/pci/builtin.o drivers/power/built-in.o drivers/power/battery/built-in.o
drivers/power/fuel_gauge/built-in.o drivers/power/mfd/built-in.o
drivers/power/pmic/built-in.o drivers/power/regulator/built-in.o
drivers/serial/built-in.o drivers/spi/built-in.o
drivers/usb/dwc3/built-in.o drivers/usb/emul/built-in.o
drivers/usb/eth/built-in.o drivers/usb/gadget/built-in.o
drivers/usb/gadget/udc/built-in.o drivers/usb/host/built-in.o
drivers/usb/musb-new/built-in.o drivers/usb/musb/built-in.o
drivers/usb/phy/built-in.o drivers/usb/ulpi/built-in.o fs/built-in.o
lib/built-in.o net/built-in.o test/built-in.o test/dm/built-in.o --
end-group arch/arm/lib/eabi_compat.o -L /usr/local/arm/gcc-linaro-
4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linuxgnueabihf/4.9.4 -lgcc -Map u-boot.map

.u-boot.cmd 使用到了 arm-linux-gnueabihf-ld.bfd,也就是链接工具,使用 ld.bfd 将各个 builtin.o 文件链接在一就形成了 u-boot 文件。 uboot 在编译的时候会将同一个目录中的所有.c 文件都编译在一起,并命名为 built-in.o,相当于将众多的.c 文件对应的.o 文件集合在一起,这个就是 u-boot 文件的来源。

如果我们要用 NXP 提供的 MFGTools 工具向开发板烧写 uboot,此时烧写的是 u-boot.imx文件,而不是 u-boot.bin 文件。 u-boot.imx 是在 u-boot.bin 文件的头部添加了 IVT、 DCD 等信息。这个工作是由文件.u-boot.imx.cmd 来完成的,此文件内容如下:

cmd_u-boot.imx := ./tools/mkimage -n
board/freescale/mx6ull_alientek_emmc/imximage.cfg.cfgtmp -T imximage -
e 0x87800000 -d u-boot.bin u-boot.imx

可以看出,这里用到了工具 tools/mkimage,而 IVT、 DCD 等数据保存在了文件board/freescale/mx6ullevk/imximage-ddr512.cfg.cfgtmp 中 ( 如 果 是 NAND 核 心 板 的 话 就 是imximage-ddr256.cfg.cfgtmp),工具 mkimage 就是读取文件 imximage-ddr512.cfg.cfgtmp 里面的信息,然后将其添加到文件 u-boot.bin 的头部,最终生成 u-boot.imx。

文件.u-boot.lds.cmd 就是用于生成 u-boot.lds 链接脚本的

2.5、 Makefile 文件

这个是顶层 Makefile 文件, Makefile 是支持嵌套的,也就是顶层 Makefile 可以调用子目录中的 Makefile 文件。 Makefile 嵌套在大项目中很常见,一般大项目里面所有的源代码都不会放到同一个目录中,各个功能模块的源代码都是分开的,各自存放在各自的目录中。每个功能模块目录下都有一个 Makefile,这个 Makefile 只处理本模块的编译链接工作,这样所有的编译链接工作就不用全部放到一个 Makefile 中,可以使得 Makefile 变得简洁明了。uboot 源码根目录下的 Makefile 是顶层 Makefile,他会调用其它的模块的 Makefile 文件,比如 drivers/adc/Makefile。当然了,顶层 Makefile 要做的工作可远不止调用子目录 Makefile 这么简单。

2.6、 u-boot.xxx 文件

u-boot.xxx 同样也是一系列文件,包括 u-boot、 u-boot.bin、 u-boot.cfg、 u-boot.imx、 u-boot.lds、u-boot.map、 u-boot.srec、 u-boot.sym 和 u-boot-nodtb.bin,这些文件的含义如下:

文件描述
u-boot编译出来的 ELF 格式的 uboot 镜像文件。
u-boot.bin编译出来的二进制格式的 uboot 可执行镜像文件。
u-boot.cfguboot 的另外一种配置文件。
u-boot.imxu-boot.bin 添加头部信息以后的文件, NXP 的 CPU 专用文件。
u-boot.lds链接脚本。
u-boot.mapuboot 映射文件,通过查看此文件可以知道某个函数被链接到了哪个地址上。
u-boot.srecS-Record 格式的镜像文件。
u-boot.symuboot 符号文件。
u-boot-nodtb.bin和 u-boot.bin 一样, u-boot.bin 就是 u-boot-nodtb.bin 的复制文件。

2.7、 .config 文件(make xxx_defconfig生成)

uboot 配置文件, 使用命令“make xxx_defconfig”配置 uboot 以后就会自动生成, .config 内容如下:
在这里插入图片描述
可以看出.config 文件中都是以“CONFIG_”开始的配置项,这些配置项就是 Makefile 中的变量,因此后面都跟有相应的值, uboot 的顶层 Makefile 或子 Makefile 会调用这些变量值(前面树莓派的时候学过,.config文件引导Makefile把有用的东西组织成内核)在.config 中会有大量的变量值为‘y’,这些为‘y’的变量一般用于控制某项功能是否使能,为‘y’的话就表示功能使能,比如:

CONFIG_CMD_BOOTD=y

如果使能了 bootd 这个命令的话, CONFIG_CMD_BOOTM 就为‘y’。在 cmd/Makefile 中有如下代码:

ifndef CONFIG_SPL_BUILD# core commandobj-y += boot.oobj-$(CONFIG_CMD_BOOTM) += bootm.oobj-y += help.oobj-y += version.o

在示例代码中,有如下所示一行代码:

obj-$(CONFIG_CMD_BOOTM) += bootm.o

CONFIG_CMD_BOOTM=y,将其展开就是:

obj-y += bootm.o

也就是给 obj-y 追加了一个“bootm.o”, obj-y 包含着所有要编译的文件对应的.o 文件,这里表示需要编译文件 cmd/bootm.c。相当于通过“CONFIG_CMD_BOOTD=y”来使能 bootm 这个命令,进而编译 cmd/bootm.c 这个文件,这个文件实现了命令 bootm。在 uboot 和 Linux 内核中都是采用这种方法来选择使能某个功能,编译对应的源码文件

2.8、 net文件

之前u-boot网络命令的实现在这里
在这里插入图片描述

2.9、 README

README 文件描述了 uboot 的详细信息,包括 uboot 该如何编译、 uboot 中各文件夹的含义、相应的命令等等。建议大家详细的阅读此文件,可以进一步增加对 uboot 的认识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security 案例实现和执行流程剖析

在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin Spring Security Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架。除了常规的认证(Authentica…

Ubuntu用户与用户组

目录Ubuntu用户与用户组创建用户和用户组Ubuntu用户与用户组 创建用户和用户组

linux执行windows创建的脚本,如何在Windows 10上创建和运行Bash Shell脚本 | MOS86

随着Windows 10的到来您还可以将Bash命令合并到Windows批处理文件或PowerShell脚本中。如果你知道你是什么Windows和UNIX使用不同的行尾字符,Windows文件系统可以在Bash环境的不同位置访问。如何在Windows上编写一个Bash脚本10当在Windows上编写shell脚本时&#xf…

31 锁,信号量,事件,队列

1.同步锁(互斥锁) from mutilprocessing import Lock 方式一: lockLock() lock.acquire() 数据操作的代码 lock.release() 方式二: with lock: 数据操作代码2.信号量 from mutilprocessing import …

Ubuntu下文件权限管理

参考:Ubuntu / Linux 下文件权限管理 作者:~莘莘 发布时间: 2021-07-12 17:09:48 网址:https://blog.csdn.net/lcx1837/article/details/118676383?spm1001.2014.3001.5501 目录一、文件权限二、修改文件权限一、文件权限 文件权…

U-Boot顶层Makefile分析

参考:U-Boot顶层Makefile介绍 作者:一只青木呀 发布时间: 2020-10-22 16:22:17 网址:https://blog.csdn.net/weixin_45309916/article/details/109218569 目录0、学习目的1、准备好uboot源码2、分析顶层Makefile2.1、版本号2.2、M…

思科路由器的硬件组成

思科路由器的硬件组成常建议常建议CCNA的学员们,除了能灵活配置与应用思科的路由器和交换机以外,还需要掌握对路由器与交换机的常规维护工作,比如IOS的安装与升级,这个过程好比为一台全新的计算机安装操作系统,在此之前…

linux gone kde 图形程序 兼容,Oracle8i HowTo

现在假设你要在Linux上安装Oracle服务器,请先过以下5关:系统要求规划硬盘创建用户创建目录设置参数1.系统要求前提条件是能够安装运行Linux,然后应满足以下硬件要求:内存 RequirementsMemory  最小要求128 MB RAM.更多(256MB)内存可以提…

U-Boot启动流程详解

参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin_45309916/article/details/109240625 目录链接脚本 u-boot.lds 详解…

linux下使用nginx搭建集群,CentOS(linux) 下Nginx的安装(Nginx+Tomcat集群第一步)

CentOS(linux) 下Nginx的安装(NginxTomcat集群)CentOS 7.4(腾讯云)pcre库zlib库opensslNginx服务器安装gcc g开发类库yum -y install gcc automake autoconf libtool makeyum install gcc gcc-cwget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz解压pcre库tar -zxvf pcre-8…

在线生成透明ICO图标神器

此神器的链接为:http://ico.duduxuexi.com/ 大家可以将这个网址收藏好,本人亲测十分好用!对我们的ios,安卓以及windows开发都有极大的好处。转载于:https://www.cnblogs.com/geeksongs/p/10040935.html

Vim的使用和快捷键介绍

参考:Linux–Vim的使用以及快捷键大全 作者:一只青木呀 发布时间: 2020-07-12 12:43:19 网址:https://blog.csdn.net/weixin_45309916/article/details/107297756 目录安装vim三种常用的模式三种常用模式的切换vim 快捷键1.一般模…

手机当电脑麦克风 linux,WO Mic让手机成为电脑的无线麦克风

WO Mic 是一款可以让 Android 手机成为电脑无线麦克风的应用,支持 windows 和 Linux,除了 WiFi,还能使用蓝牙以及 USB 数据线(只有安卓支持数据线连接)。官方下载页面如下:一、windows下安装连接windows主机上需要安装客户端和驱动…

如何编写 Cloud9 JavaScript IDE 的功能扩展

上周末我们在JSConf.eu发布了 Cloud9 IDE ,同时发布了对应的GitHub项目。在4天时间里该项目得到340个人的关注和将近50个fork。Cloud9的口号是由"由Javascripters 为Javascripters创建的IED",这口号有点递归,它意味着你可以hack这个…

make工具和Makefile基础语法(含有交叉编译、pthread_create()的处理)

目录含有交叉编译、pthread_create()处理初次使用1、编写Makefile文件2、make3、make cleanMakefile基本语法1、Makefile规则格式2、变量3、变量赋值符(、:、?、)4、模式规则(通配符)5、自动化变量6、伪目标7、条件判断8、函数使…

树莓派超声波模块测距

参考:树莓派超声波模块测距及C语言demo 作者:一只青木呀 发布时间: 2020-07-22 16:54:16 网址:https://blog.csdn.net/weixin_45309916/article/details/107516949 前面这篇博文已经讲过了:树莓派外设开发基础&#xf…

spring cloud (一、服务注册demo_eureka)

首先我的博客记理论知识很少,大家对spring boot、spring cloud 、分布式 、微服务什么的一点概念都没有的还请先去百度看看理论,知道了是做什么用的,然后再写下demo ,这样学起来才没有那么迷糊! 我一般写下的demo都是我踩了很多坑…

JavaFX 的 UI 控件集 ControlsFX

出处:http://www.oschina.net/p/controlsfx JavaFX 的 UI 控件集 ControlsFX ControlsFX 开源项目旨在为 JavaFX 开发提供更多的 UI 控件和其他工具。 该项目主要针对JavaFX 8.0(捆绑在JDK 8中),考虑到JavaFX中已经包含了一些控件…

shell 脚本编写使用

目录一、什么是shell 脚本二、shell 脚本写法三、shell 脚本语法1、第一个 shell 脚本2、read命令3、数值计算4、test命令5、中括号判断符6、默认变量7、条件判断8、函数9、循环一、什么是shell 脚本 终端中输入一系列命令完成一些操作,但是我们一条一条输入命令&a…

javaweb开发之处理表单上传文件和文件下载

2019独角兽企业重金招聘Python工程师标准>>> 一、基于表单的上传文件 1. enctype属性 当表单需要上传文件时,需指定表单 enctype 的值为 multipart/form-data。 在 form 元素的语法中,enctype 属性指定将数据发送到服务器时浏览器使用的编码…