嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第六天-Linux文件系统(物联技术666)

链接:https://pan.baidu.com/s/1VUc8cGI7bTtXuGepZZY3Ng?pwd=1688
提取码:1688

上午:文件系统介绍 

下午:文件系统的制作

教学内容:

在linux中文件分为二种:

根文件和普通文件;

Linux以树状结构管理所有目录、文件,其它分区挂载在某个目录上,这个目录被称为挂载点或安装点,然后通过此目录来访问这个分区上的文件

VFS:为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供统一的操作界面和应用编程接口,VFS只存在于内存中,不存在于任何外存空间。

根文件系统有基于flash的jffs2、yaffs、yaffs2、cramfs、基于网络的nfs等

文件系统包括ext2、ext3、yaffs、ramfs、tmpfs、devfs、proc等

一、基本文件系统的制作:

第一步制作根系统文件:

1、在home目录下创建/home/rootfs文件夹,用作新构建的根文件系统的根目录

#cd     /home

#mkdir  rootfs

2、创建根文件系统目录,主要包括以下目录

/dev  /etc  /lib  /usr  /var  /proc  /tmp  /home  /root  /mnt  /bin  /sbin  sys

#mkdir  dev  etc  lib  usr  var  proc  tmp  home  root  mnt  bin  sbin  sys

3、构建 /bin、/sbin、linuxrc:

这三个文件夹非常重要,要使用busybox工具来制作,busybox制作的都是动态链接的链接的中心就是busybox

解压busybox-1.16.1并进入目录,执行

#cd busybox-1.16.1/

# make defconfig

# make menuconfig

Busybox Setting ----->

   Build Options ----->

           [*]Build BusyBox as a static binary (no shared libs)  

          \\静态编译busybox      指定交叉编译器为                     

           (/usr/local/arm/4.3.2/bin/arm-linux-)Cross Compiler prefix

Installation Options ----->

           选择上 Don’t use /usr

Busybox Library Tuning--->

   [*]Username completion

[*]Fancy shell prompts

   [*]Query  cursor  position  from  terminal

            编译出的busybox的shell命令解释器支持显示当前路径及主机信息                保存退出

# make   

# make install

在busybox目录下会看见 _install目录,里面有/bin  /sbin  linuxrc三个文件将这三个目录或文件拷到第一步所建的rootfs文件夹下。

cp bin  sbin  linuxrc -ar /home/roots

其中a是保证是链接文件,不加a会每个bin下文件都复制一份busybox,文件会非常之大

4、构建etc目录:

进入根文件系统rootfs的etc目录,执行如下操作:

#cd /home/rootfs/etc

拷贝Busybox-1.2.0/examples/bootfloopy/etc/* 到当前目录下

# cp  –r  busybox-1.16.1/examples/bootfloopy/etc/*  rootfs/etc

etc文件夹下的inittab、fstab、profile、init.d/rcS

inittab:    用来作为linuxrc的解释脚本

init.d/rcS: inittab启动的第一个脚本,一般用来挂载系统必需的文件系统、必要的设备连接、设置IP地址、启动其他脚本等,默认仅有mount –a

fstab:  执行mount –a时,按照此文件挂载文件系统

profile:登陆完shell后自动执行此脚本,一般用来设置需要的环境变量

修改inittab

把第二项改为::respawn:-/bin/login  (::respawn:-/bin/sh  启动shell)

把第三行tty2::askfirst:-/bin/sh 屏蔽掉

拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadow到rootfs/etc下。

# cp /etc/passwd    rootfs/etc

# cp /etc/group     rootfs/etc

# cp /etc/shadow    roofs/etc

对以上三个文件修改(只留一行),只保存与root相关的项,根据具体情况内容会有所不同。

修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/ash

修改group为root:x:0:root

修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::

(注意这个值不一定一样,各人密码不一样,这个值也不一样)

登陆开发板时需输入用户名密码,同虚拟机相同

可以通过 passwd命令修改密码

或通过adduser增加新用户

修改profile

PATH=/bin:/sbin:/usr/bin:/usr/sbin                 \\可执行程序 环境变量

export LD_LIBRARY_PATH=/lib:/usr/lib            \\动态链接库 环境变量

/bin/hostname sunplusedu

USER="`id -un`"

LOGNAME=$USER

HOSTNAME='/bin/hostname'

PS1='[\u@\h \W]# '

显示主机名、当前路径等信息:

修改 etc/init.d/rc.S文件

(注意mount –a ...这条语句在下面这段程序之后)

/bin/mount -n –t  ramfs  ramfs  /var

/bin/mount -n -t  ramfs  ramfs  /tmp

/bin/mount -n -t  sysfs   none  /sys

/bin/mount -n -t  ramfs  none  /dev

/bin/mkdir /var/tmp

/bin/mkdir /var/modules

/bin/mkdir /var/run

/bin/mkdir /var/log

/bin/mkdir -p /dev/pts

/bin/mkdir -p /dev/shm

/sbin/mdev -s

/bin/mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug

修改etc/fstab文件,增加以下文件

none        /dev/pts   devpts      mode=0622     0 0

tmpfs       /dev/shm tmpfs       defaults           0 0

5、构建lib目录:

进入 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib目录

将以下动态库拷贝到rootfs/lib下

把虚拟机下的armv4t/lib文件夹下文件复制一份给要制作的根文件下,并且保持链接

#cp  *so*  roofs/lib  -a

进入以下目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib

将以下动态库拷贝到rootfs/lib下,和上面一样

#cp ./libstdc++.so.*  rootfs/lib  -a

6、使用nfs挂载验证

完成上面1-5步之后,基本的根文件系统已经完成,在此可以,直接利用cramfs、yaffs制作文件root了

修改vivi启动参数,从虚拟机上启动根文件系统,然后下载到开发板观察,但是基本文件系统缺少相应的应用软件,对于一个文件系统而言,还必须烧写应用程序,但是如果每次烧写一个应用程序就制作一次文件系统,耗费时间长,而且不灵活,为此我们可以在开发板的bootloader的时候就挂载nfs,引导启动虚拟机下的rootfs为根文件系统,下面的命令就是挂载nfs命令。

param set linux_cmd_line "noinitrd root=/dev/nfs nfsroot=/home/rootfs/(修改为实际的目录),rsize=1024,wsize=1024 ip=192.168.220.11(开发板地址可以随便填):192.168.220.xx(虚拟机的地址):192.168.220.254:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0"

 

或修改u-boot的参数:

setenv bootargs noinitrd root=/dev/nfs nfsroot=/home/rootfs/(修改为实际的目录),rsize=1024,wsize=1024 ip=192.168.220.11(开发板地址可以随便填):192.168.220.xx(虚拟机的地址):192.168.220.254:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

(例如:setenv bootargs 'noinitrd root=/dev/nfs nfsroot=/home/rootfs/,rsize=1024,wsize=1024 ip=192.168.222.70:192.168.222.66:192.168.222.254:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0')

注意:vivi修改参数使用双引号,u-boot使用单引号

7、制作根文件系统

制作cramfs:

#tar zxvf  cramfs-1.1.tar.gz        //编译cramfs根文件系统制作工具

#cd  cramfs-1.1

#make    会在当前路径下编译得到两个工具:mkcramfs  cramfsck

#cp  mkcramfs  cramfsck  /bin     //将两个工具拷贝到根目录的/bin下

# mkcramfs dirname  outfile

例如:# mkcramfs  rootfs_34/  rootfs_GUI.cramfs    

cramfsck工具用来进行CRAMFS文件系统的释放和检查

# cramfsck  file -x  dir

 

制作yaffs2:

#tar  zxvf yaffs2.tar.gz

#cd  yaffs2/utils

#make                           //会产生mkyaffsimage

#cp mkyaffsimage /bin  //将生成的工具拷贝到bin目录下

#mkyaffsimage usr usr.yaffs

例如:#mkyaffsimage  rootfs_34/   rootfs_GUI.yaffs

文件系统的优化:对于文件系统,只需要动态库,所以.a和.la的文件都可以删除。

/usr/  /home/文件夹下

二、开源程序的移植

应用程序一般是放在/usr/文件夹下

1、触摸屏的移植:

tar  zxvf   tslib-1.0.tar.bz2

生成.configure 文件

./autogen.sh

指定交叉编译器及配置脚本

#CC=arm-linux-gcc    //选择交叉编译器

#./configure --host=arm-linux --prefix=$PWD/../tslib1.0_target  --enable-inputapi=no

//在当前路径的前一级目录建立目标文件夹

#export PLUGIN_DIR=$PWD/plugins

在tslib-1.0\config.h中有一行定义“#define malloc rpl_malloc”,直接注释

//#define malloc rpl_malloc

#make

#make install

#cd ..    //生成了一个tslib_target文件,里面有bin/ etc/ include/ lib几个文件夹

移植到开发板上

在开发板的usr/目录下建立文件夹tslib,将上述四个文件夹拷贝到tslib目录下

#mkdir  /home/rootfs/usr/tslib

 #cp  tslib_target/*  /home/rootfs/usr/tslib  -r

修改 /home/rootfs/usr/tslib/etc/ts.conf将第一句话的屏蔽去掉

    #module_raw input

改为

module_raw input

修改开发板 改 /home/rootfs/usr/tslib/etc/profile 文件,添加以下启动脚本并运行

export T_ROOT=/usr/tslib                               #目录

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$T_ROOT/bin      #可执行程序目录

export LD_LIBRARY_PATH=/lib:/lib:/usr/lib:$T_ROOT/lib   #库文件目录

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0                      #framebuffer设备文件

export TSLIB_TSDEVICE=/dev/event0                    #触摸屏设备文件

export TSLIB_CALIBFILE=/etc/pointercal      #指定触摸屏校准文件pintercal的存放位置

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf             #tslib模块配置文件

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts/              #tslib插件库目录

echo "ts init success!"

使用与测试

在bootloader中挂载nfs后,在开发板中输入:

ts_calibrate        

    执行后,屏幕上出现5个点,依次点击进行校准,校准完毕后,在/etc下会产生pointercal文件,供其它程序使用

    ts_calibrate是一个应用程序,在屏幕上画几个按钮,将用户点击后从ts驱动获得的数据和屏上的坐标位置通过一套算法来获得校准数据写到一个校准文件里

测试完后,会生成poit..文件在/etc/目录下,如果要重新校验,删除poit..文件后在ts_calibrate

2、mplayer的移植

下载源代码

MPlayer - The Movie Player版本:MPlayer-1.0rc3.tar.gz

编译PC版的mplayer

#tar  zxvf  MPlayer-1.0rc3.tar.gz

#cd  MPlayer-1.0rc3

#./configure

#make

#make install

编译ARM版的mplayer

#tar  zxvf  MPlayer-1.0rc3.tar.gz

#cd  MPlayer-1.0rc3

在虚拟机终端中输入配置:

./configure --host-cc=gcc --cc=arm-linux-gcc --target=armv4l --enable-static  --disable-win32dll  --disable-dvdread --disable-dvdread-internal --disable-dvdnav --disable-libdvdcss-internal --enable-fbdev --disable-mencoder --disable-live --disable-mp3lib --enable-mad --enable-libavcodec_a --language=zh_CN

#make  //会在当前文件下生成mplayer可执行程序

其中make会出错,需要更改mplayer_src/libmpeg2/motion_comp_arm_s.S中的代码,

#vim  MPlayer-1.0rc3/libmpeg2/motion_comp_arm_s.S

在最开始的地方添加:

#ifndef HAVE_PLD

.macro pld reg

.endm

#endif

保存之后,再次make,就OK了

#make

把mplayer拷贝到usr/bin/  或者/bin/下

#cp mplayer /home/rootfs/usr/bin/

3、Qtopia-Core-4.7.0在ARM平台上的移植

step 1:配置

./configure -release -fast -embedded arm -depths 8,16,32 -no-stl -no-qt3support -no-nis -no-cups -no-iconv -no-qdbus -no-freetype -qt-sql-sqlite -qt-kbd-tty -qt-libjpeg -qt-gif -qt-libpng -continue -silent -no-mouse-linuxtp -qt-mouse-tslib -I/home/opensource/QtEmbedded-4.7.0-arm/include -L/home/opensource/QtEmbedded-4.7.0-arm/lib

注意:-I /-L 指定前面编译出的tslib的路径,这里的路径为“/home/opensource/QtEmbedded-4.7.0-arm/”

注意:编译之前使用 unset CC 取消CC变量的定义,否则编译会出错

#unset CC

//#make

//#make install

#make;make install

/*会安装库、字体等文件到/usr/local/Trolltech/QtEmbedded-4.7.0-arm目录。*/

step 2:

拷贝/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib目录下的以下文件到根文件系统/usr/lib目录下:即

cp  -a  /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/*so*  /home/rootfs/usr/lib

(也可以不用全部拷贝,可以根据需要进行拷贝,这里为了方便我们全拷贝过去)

step 3:

在根文件系统下建立目录(local,Trolltech,QtEmbedded-4.7.0-arm,lib,fonts)

#mkdir /home/rootfs/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts -p

将QtEmbedded-4.7.0-arm /lib/fonts目录下的字体unifont_160_50.qpf拷到开发板对应的目录

cp QtEmbedded-4.7.0-arm/lib/fonts/unifont_160_50.qpf  /home/rootfs/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts

step 4:修改环境变量及LCD驱动连接

修改 /etc/profile文件,增加以下声明:

export QWS_MOUSE_PROTO="Tslib:/dev/event0"

export QWS_SIZE=320x240

export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"

step 5:

拷贝一个应用程序到根文件系统的/home目录下,这里拷贝QtEmbedded-4.7.0-arm/examples/animation/appchooser

cp QtEmbedded-4.7.0-arm/lib/fonts/unifont_160_50.qpf  /home/rootfs/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts

在开发板上挂载nfs根文件系统,输入命令:

#./ appchooser  –qws

程序在显示屏上显示helloworld窗口。

4、tslib的移植(触摸屏)

    嵌入式设备中触摸屏使用非常广泛,但触摸屏的坐标和屏的坐标是不对称的,需要校准。广泛使用的是开源的tslib,我们选用tslib1.0进行配置。

解压tslib-1.0.tar.bz2

tar  zxvf   tslib-1.0.tar.bz2

生成.configure 文件

./autogen.sh

指定交叉编译器及配置脚本

#CC=arm-linux-gcc    //选择交叉编译器

#./configure --host=arm-linux --prefix=$PWD/../tslib1.0_target  --enable-inputapi=no

//在当前路径的前一级目录建立目标文件夹

#export PLUGIN_DIR=$PWD/plugins

在tslib-1.0\config.h中有一行定义“#define malloc rpl_malloc”,直接注释

#define malloc rpl_malloc 改为 define malloc rpl_malloc

#make

#make install

则会在与当前目录平级的文件夹下建立tslib_target文件夹,里面包含

bin/ etc/ include/ lib 等几个文件夹

移植到开发板上:

在开发板的usr/目录下建立文件夹tslib,将上述四个文件夹拷贝到tslib目录下

#cd     /home/rootfs/usr/

#mkdir  /usr/tslib

#cp     tslib_target/*  /usr/tslib  -r

修改 /usr/tslib/etc/ts.conf将第一句话的屏蔽去掉

    #module_raw input

改为

   module_raw input

修改开发板 /etc目录下/profile 文件,添加以下启动脚本并运行

vi /home/rootfs/etc/profile

export T_ROOT=/usr/tslib                               #目录

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$T_ROOT/bin      #可执行程序目录

export LD_LIBRARY_PATH=/lib:/lib:/usr/lib:$T_ROOT/lib   #库文件目录

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0                      #framebuffer设备文件

export TSLIB_TSDEVICE=/dev/event0                    #触摸屏设备文件

export TSLIB_CALIBFILE=/etc/pointercal      #指定触摸屏校准文件pintercal的存放位置

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf             #tslib模块配置文件

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts/              #tslib插件库目录

echo "ts init success!"

使用与测试:

在开发板输入命令:

./ts_calibrate         

执行后,屏幕上出现5个点,依次点击进行校准,校准完毕后,在/etc下会产生pointercal文件,供其它程序使用

ts_calibrate是一个应用程序,在屏幕上画几个按钮,将用户点击后从ts驱动获得的数据和屏上的坐标位置通过一套算法来获得校准数据写到一个校准文件里

ts_print        将屏幕坐标打印出来

                         横坐标 纵坐标  

1796351007.320859:    156    116    500   按下

1796351007.355145:    156    116      0   抬起

ts_print_raw    将屏幕坐标的原始数据打印出来

1796350964.530867:    216    865      1  按下

1796350989.946831:      0      0      0  抬起

ts_test      检测一下校正结果,如果touch的时候,十字光标随着手指移动。

5、boa移植(boa为一个web服务器,主要应用于嵌入式系统)

www.boa.org下载boa-0.94.13.tar.gz

解压tar zxvf boa-0.94.13.tar.gz

cd src/

运行configure 修改Makefile文件:

将:

vi Makefile

CC = gcc       CPP = gcc -E     该为:CC = arm-linux-gcc       CPP = arm-linux-gcc -E

修改src/boa.c 注释掉下面语句:

#if 0

if (setuid(0) != -1)

{

      DIE(”icky Linux kernel bug!”);

}

#endif

运行make

util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1

解决方法:

修改compat.h中的

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

为:

#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

设置建立相关文件夹:

建立../rootfs/usr/boa

mkdir /home/rootfs/usr/boa      (存放设备文件boa相关文件)

建立www  cgi-bin  log三个文件夹,

cd /home/rootfs/usr/boa/

mkdir www  cgi-bin  log

(www文件夹存放web相关文件)(cgi-bin存放cgi文件)(log存放日志,必须可写)

修改配置文件boa.conf

把复制../boa-0.94.13/src/boa.conf到../rootfs/usr/boa目录下

    cp boa.conf /home/rootfs/usr/boa/

在boa.conf修改相关信息

    vi /home/rootfs/usr/boa/boa.conf

    修改User nobody 为 User 0

    修改Group nogroup 为 Group 0

        修改为:ErrorLog    /usr/boa/log/error_log

        修改为:AccessLog   /usr/boa/log/access_log

    修改为:DocumentRoot /usr/boa/www

    修改为:ScriptAlias /cgi-bin/  /usr/boa/cgi-bin

    修改为:MimeTypes /usr/boa/mime.types

    去掉注释boa.conf大约第94行

    ServerName www.your.org.here

把文件放入文件夹中:假设在boa-0.94.13/src/

    cp boa /home/rootfs/usr/boa/

        把相关的www文件放入/home/rootfs/usr/boa/www/中

OK,在开发板上./usr/boa/boa程序

./usr/boa/boa

还有把IE的代理服务器取消

在windows下通过http://172.20.223.151这种形式访问,进行测试,如果换了主页要清下IE缓存

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024河南省公务员报名确认缴费流程

1、抢考点!及时的报名确认以及缴费! 2024年1月31日9∶00至2月40日17∶00前进行上传照片、选择考区和网上缴费。需要提醒各位考生的是,各个城市考点容量有限,需要尽早进行确认缴费选考点。每年都有因为报名确认较晚,未能…

云流量回溯在网络管理中的关键应用

云流量回溯是一种在云计算环境下的网络流量分析技术,它能够追踪和还原网络中的流量,为网络管理和安全监控提供了强大的支持。在本文中,我们将探讨云流量回溯的原理,并探讨其在实际网络管理中的关键应用。 1. 云流量回溯概述 云流量…

Docker数据卷挂载(以容器化Mysql为例)

数据卷 数据卷是一个虚拟目录,是容器内目录与****之间映射的桥梁 在执行docker run命令时,使用**-v 本地目录:容器目录**可以完成本地目录挂载 eg.Mysql容器的数据挂载 1.在根目录root下创建目录mysql及三个子目录: cd ~ pwd m…

嵌入式学习第十一天

1.数组和指针的关系: 1.一维数组和指针的关系: int a[5] {1, 2, 3, 4, 5}; int *p NULL; p &a[0]; p a; 数组的数组名a是指向数组第一个元素的一个指针常量 a &a[0] a 的类型可以理解为 int * 有两种情况除…

常见の算法链表问题

时间复杂度 1.链表逆序 package class04;import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {publi…

React16源码: React中commitAllHostEffects内部的commitDeletion的源码实现

commitDeletion 1 )概述 在 react commit 阶段的 commitRoot 第二个while循环中调用了 commitAllHostEffects,这个函数不仅仅处理了新增节点,更新节点最后一个操作,就是删除节点,就需要调用 commitDeletion&#xff0…

行业应用 | Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟,人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制,人工智能在“传统”行业的落地不如消费互联网行业,但是借助人工智能为“传统”行业的发展注入新能量一直是相关…

大文件传输之以太网UDP传输延迟解决方案

在数字化浪潮席卷全球的今天,数据已成为企业最宝贵的资产之一。随着企业规模的扩大和业务的全球化,大文件传输的需求日益增长,它不仅关系到企业内部数据的高效管理,也是与外部合作伙伴进行有效沟通的关键。然而,大文件…

STM32——创建HAL库工程

第一步 新建工程文件夹 所有文件夹存放的内容: 第二步 拷贝/新建工程相关文件 1、Drivers(创建如下文件夹,除readme.txt) 文件夹存放的内容: 2、Middlewares和output暂时不需要创建(目前用不到&#x…

幻兽帕鲁一键开私服?超简单小白教程一看就会!

如何自建幻兽帕鲁服务器?基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了,一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器,阿里云服务器网aliyunfuwuqi.com分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程…

ARM常用汇编指令

文章目录 前言一、处理器内部数据传输指令MOV: 将数据从一个寄存器复制到另一个寄存器。MRS: 将特殊寄存器(CPSR,SPSR)中的数据传给通用寄存器。MSR: 将通用寄存器中的数据传给特殊寄存器(CPSR,SPSR)。 二、存储器访问指令LDR:用于从内存中加…

Shell脚本——函数的使用

一、函数 1.函数的作用 定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率 在编写脚本时,有些脚本可以反复使用,可以调用函数来解决,语句块定义成函数约等于别名 函数定义&…

51-17 视频理解串讲— MViT 论文精读

继TimeSformer模型之后,咱们再介绍两篇来自Facebook AI的论文,即Multiscale Vision Transformers以及改进版MViTv2: Improved Multiscale Vision Transformers for Classification and Detection。 由于本司大模型组最近组织阅读的论文较多,…

【iOS ARKit】同时开启前后摄像头BlendShapes

在上一节中已经了解了 iOS ARkit 进行BlendShapes的基本操作,这一小节继续实践同时开启前后摄像头进行人脸捕捉和世界追踪。 iOS设备配备了前后两个摄像头,在运行AR 应用时,需要选择使用哪个摄像头作为图像输人。最常见的AR 体验使用设备后置…

Java实现数字化社区网格管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5.1 查询企事业单位5.2 查询流动人口5.3 查询精准扶贫5.4 查询案件5.5 查询人口 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数字化社区网格管理系统&#xf…

Istio-gateway

一. gateway 在 Kubernetes 环境中,Kubernetes Ingress用于配置需要在集群外部公开的服务。但是在 Istio 服务网格中,更好的方法是使用新的配置模型,即 Istio Gateway,Gateway 允许将 Istio 流量管理的功能应用于进入集群的流量&…

MongoDB日期存储与查询、@Query、嵌套字段查询实战总结

缘由 MongoDB数据库如下: 如上截图,使用MongoDB客户端工具DataGrip,在filter过滤框输入{ profiles.alias: 逆天子, profiles.channel: },即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求:用Java代码来查询…

【代码随想录15】110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

目录 110. 平衡二叉树题目描述参考代码 257. 二叉树的所有路径题目描述参考代码 404.左叶子之和题目描述参考代码 110. 平衡二叉树 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树…

微信小程序(十四)分包和分包预加载

注释很详细,直接上代码 上一篇 新增内容: 1.分包的配置 2.分包预加载的写法 先说说为什么需要分包: 小程序追求小而快,主包的大小控制是小程序上线的硬性要求,分包有利于小程序优化加载速度 分包的注意事项&#xff1a…

JVM篇:垃圾回收

如何判断对象可以被回收 Java中对象能否被回收,是根据兑现是否被引用来决定的。如果对象被引用了,说明该对象还在使用,不允许被回收 main栈帧中demo变量存储着Demo实例对象的地址,与Demo实例对象建立了连接关系此时Demo实例对象可…