正点原子 IMX6ULL 自学笔记(未完待续。。。)

news2024/11/27 8:38:45

一、Makefile

1、语法

目标…… : 依赖文件集合……
命令 1
命令 2
……
例子:
生成main可执行文件需要main.o input.o calcu.o,命令是gcc -o main main.o input.o calcu.o

 main: main.o input.o calcu.o
 gcc -o main main.o input.o calcu.o
 
 main.o: main.c
 gcc -c main.c
 input.o: input.c
 gcc -c input.c
 calcu.o: calcu.c
 gcc -c calcu.c
 
 clean:
 rm *.o
 rm main

2、变量

Makefile中的变量只能是字符串
例 :将object赋值 main.o input.o calcu.o,变量引用的时候要加$()

 objects = main.o input.o calcu.o
 main: $(objects)
 gcc -o main $(objects)

3、几种赋值运算符

“=” :不一定要用定义好的值也可以用后面的值,与c语言赋值很像
“:=” :只使用定义的值后面的赋值不起作用
“?=”:如果没有赋值则赋值
“+=”:在后面附加

###4、当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值

(泛化了),使用方法如下:

%.o : %.c
命令

5、自动化变量(常用的三种:$ @、$ <和$ ^)

在这里插入图片描述

 objects = main.o input.o calcu.o
 main: $(objects)
 gcc -o main $(objects)
 
 %.o : %.c
	 gcc -c $<
 clean:
 rm *.o
 rm main

二、系统移植

1、何为uboot?

1、uboot是一个裸机程序,比较复杂。
2、uboot就是一个bootloader,作用就是用于启动Linux或其他系统。Uboot最主要的工作就是初始化DDR。因为Linux是运行在DDR里面的。一般Linux镜像zImage(uImage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI FLASH等等外置存储区域。
这里就牵扯到一个问题,需要将Linux镜像从外置flash拷贝到DDR中,再去启动。
Uboot的主要目的就是为系统的启动做准备。
Uboot不仅仅能启动Linux,也可以启动其他系统,比如vxworks。
Linux不仅仅能通过uboot启动。
Uboot是个通用的bootloader,他支持多种架构。

2、Uboot获取

1、首先就是uboot官网。缺点就是支持少,比如某一款具体芯片驱动等不完善。
2、SOC厂商会从uboot官网下载某一个版本的uboot,然后在这个版本的uboot上加入相应的SOC以及驱动。这就是SOC厂商定制版的uboot。NXP官方的I.MX6ULL EVK板子
3、做开发板的厂商,开发板会参考SOC厂商的板子。开发板必然会和官方的板子不一样。因此开发板厂商又会去修改SOC厂商做好的uboot,以适应自己的板子。

3、uboot编译

首先在 Ubuntu 中安装 ncurses 库,否则编译会报错,安装命令如下:

sudo apt-get install libncurses5-dev

新建一个 shell 脚本文件,每次只需要执行 shell 脚本即可完成编译工作(这个脚本会清除之前的配置)。如下:

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

第 1 行是 shell 脚本要求的,必须是“#!/bin/bash”或者“#!/bin/sh”。
第 2 行使用了 make 命令,用于清理工程,也就是每次在编译 uboot 之前都清理一下工程。
这里的 make 命令带有三个参数,第一个是 ARCH,也就是指定架构,这里肯定是 arm;第二个
参数 CROSS_COMPILE 用于指定编译器,只需要指明编译器前缀就行了,比如 arm-linux-gnueabihf-gcc 编译器的前缀就是“arm-linux-gnueabihf-”;最后一个参数 distclean 就是清除工程。
第 3 行也使用了 make 命令,用于配置 uboot。同样有三个参数,不同的是,最后一个参数
是 mx6ull_14x14_ddr512_emmc_defconfig。前面说了 uboot 是 bootloader 的一种,可以用来引导
Linux,但是 uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构
和外设,比如 USB、网络、SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所
以在编译 uboot 之前,一定要根据自己的需求配置 uboot。 mx6ull_14x14_ddr512_emmc_defconfig就是正点原子针对 I.MX6U-ALPHA 的 EMMC 核心板编写的配置文件,这个配置文件在 uboot源码的 configs 目录中。在 uboot 中,通“makexxx_defconfig”来配置 uboot,xxx_defconfig就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中。
第 4 行有 4 个参数,用于编译 uboot,通过第 3 行配置好 uboot 以后就可以直接“make”编
译 uboot 了。其中 V=1 用于设置编译过程的信息输出级别;-j 用于设置主机使用多少线程编译
uboot,最好设置成我们虚拟机所设置的核心数,如果在 VMware 里面给虚拟就分配了 4 个核,
那么使用-j4 是最合适的,这样 4 个核都会一起编译。
使用 chmod 命令给予 mx6ull_alientek_emmc.sh 文件可执行权限,然后就可以使用这个 shell
脚本文件来重新编译 uboot,命令如下:

./mx6ull_alientek_emmc.sh

在Makefile254行加入这两条可以不用运行脚本 make就可以编译
在这里插入图片描述

4、uboot烧写与启动

1、我们要将 imxdownload (开发板光盘->5、开发工具->2、
Ubuntu 下裸机烧写软件->imxdownload)拷贝到工程根目录下。
2、ls /dev/sd*`看看烧写到那个sd卡
3、chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
4、./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!

5、uboot命令的使用

1、基础命令

help:查看所有命令
? (要查找命令):查看某一个命令信息
printenv:查看当前板子的环境变量
setenv:设置环境变量,也可以自定义环境变量,也可以删除环境变量(设置为空值就可以删除)
setenv author hsd 创建一个author环境变量赋值为hsd
saveenv:保存环境变量
md[.b, .w, .l] address [# of objects] :内存读写指令,要注意uboot中命令的数字都是16进制

比如你想查看以 0X80000000 开始的 20 个字节的内存值,显示格式为.b 的话,应该使用
如下所示命令:
md.b 80000000 14
而不是:
md.b 80000000 20

.b 格式显示,长度为 0x10,也就是 16 个字节;.w 格式显示,长度为 0x10,也就是 16*2=32
个字节;.l 格式显示,长度也是 0x10,也就是 16*4=64 个字节。
nm [.b, .w, .l] address  用于修改指定地址的内存值,输入q结束
mw [.b, .w, .l] address value [count]   用于使用一个指定的数据填充一段内存
例
mw.l 80000000 0A0A0A0A 10
将以 0X80000000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A

在这里插入图片描述

cp [.b, .w, .l] source target count   数据拷贝命令
cp.l 80000000 80000100 10	将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个
内存块(0x10 * 4=64 个字节)
cmp [.b, .w, .l] addr1 addr2 count
cmp.l 80000000 80000100 10	来比较 0x80000000 和 0X80000100 这
两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节)

2、网络相关的命令

ping主机之前一定要改下面这个配置
在这里插入图片描述

在这里插入图片描述

setenv ipaddr 192.168.1.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.253
saveenv
1、nfs命令

安装nfs

sudo apt-get install nfs-kernel-server rpcbind

等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有
的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹。
在这里插入图片描述
配置 nfs

sudo vi /etc/exports

打开/etc/exports 以后在后面添加如下所示内容:

/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)

在这里插入图片描述
重启 NFS 服务,使用命令如下:

sudo /etc/init.d/nfs-kernel-server restart
	nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。
nfs [loadAddress] [[hostIPaddr:]bootfilename]
例:
nfs 80800000 192.168.1.253:/home/zuozhongkai/linux/nfs/zImage
命令中的“ 80800000 ” 表 示 zImage 保 存 地 址 ,
“192.168.1.253:/home/zuozhongkai/linux/nfs/zImage”表示 zImage 在 192.168.1.253 这个主机中,路径为/home/zuozhongkai/linux/nfs/zImage。
2、tftp 命令

执行下面两条安装TFTP

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

创建一个tftp根目录(要给权限),此目录文件可以下载到开发板(与nfs一样)

mkdir /home/zuozhongkai/linux/tftpboot
chmod 777 /home/zuozhongkai/linux/tftpboot

最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp,输入以下内容

 server tftp
 {
	 socket_type = dgram
	 protocol = udp
	 wait = yes
	 user = root
	 server = /usr/sbin/in.tftpd
	 server_args = -s /home/hsd/linux/tftpboot/
	 disable = no
	 per_source = 11
	 cps = 100 2
	 flags = IPv4
 }

启动tftp

sudo service tftpd-hpa start

打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:

 # /etc/default/tftpd-hpa

 TFTP_USERNAME="tftp"
 TFTP_DIRECTORY="/home/hsd/linux/tftpboot"
 TFTP_ADDRESS=":69"
 TFTP_OPTIONS="-l -c -s"

重启tftp服务器

sudo service tftpd-hpa restart

指令格式

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress 是文件在 DRAM 中 的存 放 地 址 ,[[hostIPaddr:]bootfilename]是要从 Ubuntu 中下载的文件。但是和 nfs 命令的区别在于,只需要输入文件名即可。
例:

tftp 80800000 zImage

看到“TFTP error: ‘Permission denied’ (0)”这样的错误提示,提示没有权限,出现这个错误一般有两个原因:
①、在 Ubuntu 中创建 tftpboot 目录的时候没有给予 tftboot 相应的权限。
②、tftpboot 目录中要下载的文件没有给予相应的权限。
针对上述两个问题,使用命令“chmod 777 xxx”来给予权限,其中“xxx”就是要给予权限的文件或文件夹。

3、EMMC和SD卡

1、mmc read 命令

格式

mmc read addr blk# cnt

addr 是数据读取到 DRAM 中的地址,blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,cnt 是要读取的块数量(十六进制)。比如从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处,命令如下:

mmc dev 1 0 //切换到 MMC 分区 0
mmc read 80800000 600 10 //读取数据
2、mmc list 命令
mmc list 命令用于来查看当前开发板一共有几个 MMC 设备

mmc dev 0 //切换到 SD 卡,0 为 SD 卡,1 为

有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区

mmc dev 1 //切换到 EMMC
mmc part //查看 EMMC 分区

在这里插入图片描述
如果要将 EMMC 的分区 2 设置为当前 MMC 设备,可以使用如下命令:

mmc dev 1 2
3、mmc write 命令

要将数据写到 MMC 设备里面,可以使用命令“mmc write”,格式如下:

mmc write addr blk# cnt

addr 是要写入 MMC 中的数据在 DRAM 中的起始地址,blk 是要写入 MMC 的块起始地址
(十六进制),cnt 是要写入的块大小,一个块为 512 字节。

例:
如果要在 uboot 中更新 EMMC 对应的 uboot,可以使用如下所示命令:

mmc dev 1 0 //切换到 EMMC 分区 0
tftp 80800000 u-boot.imx //下载 u-boot.imx 到 DRAM
mmc write 80800000 2 32E //烧写 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分区配置,EMMC 需要这一步!

千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!

4、FAT 格式文件系统操作命令

对于I.MX6U来说,SD/EMMC分为三个分区:
第一个:存放uboot
第二个:存放Linux zImage,.dtb。FAT
第三个:系统的根文件系统,EXT4
1、fatinfo 命令

用于查询指定 MMC 设备分区的文件系统信息,格式如下:

fatinfo <interface> [<dev[:part]>]

interface 表示接口,比如 mmc,dev 是查询的设备号,part 是要查询的分区。比如我们要查
询 EMMC 分区 1 的文件系统信息,命令如下:

fatinfo mmc 1:1

在这里插入图片描述

2、fatls 命令

用于查询 FAT 格式设备的目录和文件信息,命令格式如下:

fatls <interface> [<dev[:part]>] [directory]

interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory
是要查询的目录。比如查询 EMMC 分区 1 中的所有的目录和文件,输入命令:

fatls mmc 1:1

在这里插入图片描述

3、fstype 命令

用于查看 MMC 设备某个分区的文件系统格式,命令格式如下:

fstype <interface> <dev>:<part>

fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2

在这里插入图片描述
从上图可以看出,分区 0 格式未知,因为分区 0 存放的 uboot,并且分区 0 没有格式化,所
以文件系统格式未知。分区 1 的格式为 fat,分区 1 用于存放 linux 镜像和设备树。分区 2 的格
式为 ext4,用于存放 Linux 的根文件系统(rootfs)。

4、fatload 命令(重要)

用于将指定的文件读取到 DRAM 中,命令格式如下:

fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]

interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。我们将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0X80800000 地址处,命令如下:

fatload mmc 1:1 80800000 zImage

在这里插入图片描述

5、BOOT操作指令

1、bootz 命令(启动zImage命令)

要启动 Linux,可从 EMMC 或者 NAND 也可通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中,然后使用 bootz 命令来启动,bootz 命令格式如下:

bootz [addr [initrd[:size]] [fdt]]

addr 是 Linux 镜像文件在 DRAM 中的位置。
initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可。
fdt 就是设备树文件在 DRAM 中的地址。

例(tftp启动):

tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000

在这里插入图片描述
例(emmc启动):

fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000

在这里插入图片描述

2、bootm 命令(启动uImage命令,其余与bootz一致)
3、boot 命令

boot 会读取环境变量 bootcmd 来启动 Linux 系统,这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可以修改的。命令如下:

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'
saveenv
boot

在这里插入图片描述
倒计时结束以后就会启动 Linux 系统,其实就是执行的 bootcmd 中的启动命令。

6、其他指令

1、reset 命令

复位

2、go 命令

跳到指定的地址处执行应用

tftp 87800000 printf.bin
go 87800000

在这里插入图片描述

3、run 命令

用于运行环境变量中定义的命令,比如可以通过“run bootcmd”来运行 bootcmd 中的启动命令,但是 run 命令最大的作用在于运行我们自定义的环境变量。
例:
创建环境变量 mybootemmc、mybootnet 和 mybootnand,命令如下:

setenv mybootemmc 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'
setenv mybootnand 'nand read 80800000 4000000 800000;nand read 83000000 6000000 100000;bootz 80800000 - 83000000'
setenv mybootnet 'tftp 80800000 zImage; tftp 83000000imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'
saveenv

通过下面方式运行

run mybootemmc

run mytoobnand

run mybootnet

6、U-Boot 顶层 Makefile 详解

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

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

相关文章

C++实现对象行为型-迭代器模式

1.1 基本概念 迭代器模式&#xff08;Iterator Pattern&#xff09;&#xff1a;提供了一种方法来访问聚合对象&#xff0c;而不用暴露这个对象的内部。 聚合对象的两个基本功能&#xff1a; &#xff08;1&#xff09;存储内部数据&#xff1b; &#xff08;2&#xff09;…

MySQL表的进阶知识

目录 一、数据库约束 1、not null 2、unique 3、primary key 4、auto_increment 5、default 6、foreign key 7、check 二、插入数据 三、设计表 1、一对一 2、一对多 3、多对多 四、查询 1、聚合查询 a、聚合函数查询 b、group by c、having 2、联合查…

pikachu靶场-8 越权漏洞

越权漏洞 越权漏洞概述 由于没有对用户权限进行严格的判断&#xff0c;导致低权限的账号&#xff08;比如普通用户&#xff09;可以去完成高权限账号&#xff08;比如超级管理员&#xff09;范围内的操作 平行越权&#xff1a;A用户和B用户属于同一级别用户&#xff0c;但各…

虚拟主播怎么做出来的?今日安利:AI虚拟人物怎么弄?

某天&#xff0c;一位品牌店的老板向我寻求帮助&#xff0c;大概内容就是&#xff1a;“他最近要开拓线上店铺的直播渠道&#xff0c;直播时间较长&#xff0c;雇一位主播又费钱又辛苦&#xff0c;想制作一个符合品牌调性的AI虚拟人物来带货。”于是我跟他分享了制作虚拟主播的…

北京医保定点医院2022年版

文章目录概述官方查询方法49家A类定点医院政府公告初始19家2021年4月新增13家A类医院2021年11月新增7家A类医院2022年6月新增10家A类医院定点中医/专科医院定点社区卫生服务机构附录问题医保电子凭证4家定点医院的查询和修改北京医保个人账户资金定向使用北京医院排行榜单概述 …

基于BINN算法的CCPP全路径覆盖算法

1.CCPP整体算法文档 1.1 ccpp基础介绍 全路径覆盖算法&#xff08;CCPP: Complete Coverage Path Planning&#xff09;作为扫地机器人较为关键的组成部分&#xff0c;其问题的本质是&#xff1a;在栅格地图中,全覆盖路径规划问题就演变为寻找机器人的下一个移动位置,只有准确…

java计算机毕业设计ssm职工社保信息管理系统t22xh(附源码、数据库)

java计算机毕业设计ssm职工社保信息管理系统t22xh&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

建设银行互联网经营战略优化方案设计

目 录一、绪论 1 &#xff08;一&#xff09;项目背景 1 &#xff08;二&#xff09;项目意义 1 &#xff08;三&#xff09;项目内容和方法 1 二、互联网金融与我国商业银行概述 3 &#xff08;一&#xff09;互联网金融的内涵 3 &#xff08;二&#xff09;互联网金融的功…

【云计算与大数据计算】Hadoop MapReduce实战之统计每个单词出现次数、单词平均长度、Grep(附源码 )

需要全部代码请点赞关注收藏后评论区留言私信~~~ 下面通过WordCount&#xff0c;WordMean等几个例子讲解MapReduce的实际应用&#xff0c;编程环境都是以Hadoop MapReduce为基础 一、WordCount WordCount用于计算文件中每个单词出现的次数&#xff0c;非常适合采用MapReduce进…

描述统计 | 学习笔记 (全)

一.导论 统计学是通过收集&#xff0c;整理&#xff0c;分析&#xff0c;描述数据等手段&#xff0c;以达到推断所测对象的本质&#xff0c;甚至预测对象未来的一门综合性科学。其目的是探索数据的内在数量规律性&#xff0c;以达到对客观事物的科学认识 统计的本业是消化数据…

一种近红外I区荧光染料ICG-CBT 主要应用领域,是药品监督管理局(FDA)批准的体内应用染料

英文名称:ICG-CBT 保存条件:-20℃ 产品类别:化学试剂 结构式&#xff1a; 产品描述&#xff1a;&#xff08;ICG&#xff09;是一种近红外I区荧光染料[1]&#xff0c;是药品监督管理局&#xff08;FDA&#xff09;批准的体内应用染料。其激发和发射波长分别在785 nm、810 nm…

【C++初阶7-stringOJ】上手用一下

前言 本期通过几道OJ题&#xff0c;上手用用string。 1. 把字符串转换成整数 描述 将一个字符串转换成一个整数&#xff0c;要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0 数据范围&#xff1a;字符串长度满足0 ≤ n ≤100 进阶&am…

【读书笔记】万物原理——打开客观世界与主观情感的大门

被尹烨老师推荐种草的&#xff0c;以为是一本讲生命科学的科普书&#xff0c;看上了又以为是说量子物理等高端科学研究的&#xff0c;最后被互补性理论惊到了。这哪里只是一本打开认知客观世界的大门&#xff0c;还让我重识内心。那些看不见摸不着的情感&#xff0c;比如同情心…

数字孪生十大问题有哪些?通俗解释指的是什么?

数字孪生&#xff08;Digital Twins&#xff09;之火热&#xff0c;已经成为了一个不争的事实。数字孪生的概念&#xff0c;起源于制造业&#xff0c;现在已广泛应用到了智慧城市、智慧交通、智慧农业、智慧医疗、智能家居等行业。数字孪生十大问题有哪些&#xff1f;指的是什么…

018 | 服饰颜色与族群名称对颜色认知的影响 | 大学生创新训练项目申请书 | 极致技术工厂

研究目的 本项目以瑶、壮、汉三个民族、六个族群为研究对象&#xff0c;通过七个实验探索服饰颜色与族群名称对颜色认知的影响。重点提出以下两个问题&#xff1a; &#xff08;1&#xff09;服饰颜色是否影响少数民族个体的颜色偏好&#xff1f; &#xff08;2&#xff09;服…

刷完 300 道 LeetCode 题后,我膨胀到要飘起来了!纯正 Java 版

算法题就好像科举考试时代背的八股文&#xff0c;是知识改变命运的代表作。你不刷&#xff0c;不管是校招还是社招&#xff0c;就很过算法题这一关。 我整理的这份 LeetCode 刷题笔记足足 300 道&#xff0c;对算法薄弱和需要提高算法的同学很有帮助。 随便打开一道题解感受下…

【云原生】监视Docker桌面的容器内存和CPU使用情况

目录 一、如何监视Docker桌面的容器内存和CPU使用情况 1、stats命令 2、Docker 统计命令stats是如何工作的 2.1、命令与描述 2.2、OPTIONS 2.3、例子 2.4、格式化 3、满足资源使用扩展 4、如何安装“资源使用情况”扩展插件&#xff1f; 5、总结 一、如何监视Docker桌…

SQL记录

DateDiff函数 定义和用法 DATEDIFF() 函数返回两个日期之间的天数。 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式。 注释&#xff1a;只有值的日期部分参与计算。 实例 下面是 SELECT 语句&#xff1a; SELECT DATEDIFF(‘2008-11-30’,‘2…

WinRar去除弹窗广告的学习和研究

不可否认WinRar是一款优秀的解压缩软件&#xff0c;尤其是在Windows中使用还是较频繁的。 但是使用时弹出&#xff1a; 这就有点难受了。 那么怎么解决呢&#xff1f;好吧&#xff0c;以学习和研究为目的开始折腾...... 经过对WinRar不同版本的试用&#xff0c;原来这个弹窗是…

ubuntu修改网易云音乐分辨率显示

问题 网易云音乐不能随着系统显示的缩放比自动调整&#xff0c;分辨率较高的显示器上界面显示特别小。只能通过如下的办法解决&#xff1a; ubuntu修改网易云音乐分辨率显示&#xff0c;也就是修改显示 DPI 。 方法 sudo vim /usr/share/applications/netease-cloud-music.d…