linux文件夹打包命令
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
---------------------------------------------
.rar
解压:rar a FileName.rar
压缩:rar e FileName.rar
网络挂载:
mount -o nolock -t nfs 10.6.3.12:/szsa021/usrhome/ben.du/Jiuzhou_M3721/sourcecode/buildroot/output/target/usr/bin /root
kernel打印:
echo "8 4 1 7" >/proc/sys/kernel/printk
查询打印级别:
cat /proc/sys/kernel/printk
网络烧写image
1.挂载image到 /root下
mount -o nolock -t nfs 10.6.3.12:/szsa021/usrhome/ben.du/Jiuzhou_M3721/sdk/buildroot-7.4.0.38/output/images /root
使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;
#cat /proc/mtd
将九州提供的tool nandwrite拷贝到image下
在服务器上,改变nandwrite/flash_erase的权限;
chmod 777 nandwrite
chmod 777 flash_erase
//kernel
# ./flash_erase /dev/mtd8 0 0
# ./nandwrite -p /dev/mtd8 main.ubo
linux下gpio的控制
echo $1 > /sys/class/gpio/export ---- enable gpio
echo out > /sys/class/gpio/gpio$1/direction ---- 输出输入设置
echo 1 > /sys/class/gpio/gpio$1/value ---- 输出值
例如gpio 193
echo 193 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio193/direction
echo 1 > /sys/class/gpio/gpio193/value
寄存器读写:
写:devmem 0x1802A06F 32 0x00000004
读:devmem 0x1802A06F
应用层修改寄存器的方法,参考busybox中的devmem_main函数,这个函数就是devmem命令的实现,即将寄存器地址mmap到kernel,再读写对应的地址;
内存映射的步骤:
用open系统调用打开文件, 并返回描述符fd.
用mmap建立内存映射, 并返回映射首地址指针start.
对映射(文件)进行各种操作, 显示(printf), 修改(sprintf).
用munmap(void *start, size_t lenght)关闭内存映射.
用close系统调用关闭文件fd.
memory map
# cat /proc/meminfo
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
$ ldd --help
Usage: ldd [OPTION]... FILE...
--help print this help and exit
--version print version information and exit
-d, --data-relocs process data relocations
-r, --function-relocs process data and function relocations
-u, --unused print unused direct dependencies
-v, --verbose print all information
--verbose编译选项是表示将整个编译链接过程的中间步骤打印出来;
buildroot中很多模块都是通过下面的定义控制是否打开该编译选项
# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands
ifeq ("$(origin V)", "command line")
KBUILD_VERBOSE = $(V)
endif
例如编译 uboot
make uboot-rebuild V=1即可打开该选项;
关于libc/glibc等标准库的链接:
在编译uboot的时候,虽然将libc.a链接加载进来,但是编译选项打开了 -nostdlib选项,该选项默认不会使用标准库中的函数;
-nostdlib
链接的时候不使用标准的系统启动文件和系统库。 没有启动文件和只用你指定的库可以被传递给连接器。与系统库有关的特定的连接选项(例如-static-libgcc 和 -shared-libgcc )将会被忽略。编译器可能会生成memcmp,memset,memcpy和memmove的调用,这些entries通常会被标准库libc中的相关的entries解决。当这个选项被使用的时候,这些入口点应该通过其他的方法被提供。
在alistarter的makefile中有如下定义,关掉即可链接到libc.a标准库;
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
此外还有如下编译选项:
-nostartfiles
连接的时候不使用标准系统的启动文件。标准系统库通常被使用,除非选项“-nostdlib”和“-nodefaultlibs”被使用。
-nodefaultlibs
连接的使用不使用标准系统库。只有你指定的库才能够传递给连接器。与系统库有关的特定的连接选项(例如-static-libgcc 和 -shared-libgcc )将会被忽略。标准的启动文件通常会被使用,除非-nostartfiles选项被使用。
编译器可能会生成memcmp,memset,memcpy和memmove的调用,这些entries通常会被标准库libc中的相关的entries解决。当这个选项被使用的时候,这些入口点应该通过其他的方法被提供。
这些选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件。
uboot可以使用tftpput命令将memory保存到tftp中;
U-boot> tftpput 0x80000000 0x100000 10.8.7.205:test_1.bin
buildroot用make show-source可以看到每个module对应的git:
ben.du@szsa02:~/./sourcecode/buildroot$ make show-source
串口测试:
cat /dev/ttyS +[table键]
echo testSerialCharString > /dev/ttyS0
进程前后台
# jobs //查看任务,返回任务编号n和进程号
# bg %n //将编号为n的任务转后台运行
# fg %n //将编号为n的任务转前台运行
# ctrl+z //挂起当前任务
# ctrl+c //结束当前任务
反向删除:删除si文件夹之外的所有文件
ls | grep -v si | xargs rm -r
查看linux kernel版本信息的两种方法:
1、cat /proc/version
2、uname -a
查看挂载状态:
cat /proc/mounts
可用readelf -h 查看库文件*.o目标文件是大端还是小端。
File: ./sdk/lib/libtuya_iot.a(uf_file.c.o)
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 17992 (bytes into file)
Flags: 0x70001007, noreorder, pic, cpic, o32, mips32r2
Size of this header: 52 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 40 (bytes)
Number of section headers: 66
Section header string table index: 65
libcurl enable
Target packages > Libraries > Networking
[*] libcurl
buildroot在编译之前会根据.config 文件来检查output/build/package 的6个文件,做相应的步骤:
.stamp_configured, 此文件表示已经配置过
.stamp_downloaded, 此文件表示源码已经下载过,没有此文件会重新下载
.stamp_patched, 此文件表示已经打过补丁
.stamp_extracted 此文件表示已经压过
.stamp_builted 此文件表示源码已经编译过
.stamp_target_installed 此文件表示软件已经安装过
想要从新执行哪一步,就把对应的.stamp_文件删除就行
modularizes features,即以可加载内核模块方式编译,而不是内建内核模块(built-in module)。
Linux Project下MIPS Memory Map --- TLB(Translation Lookaside Buffer)
MIPS addr:
访问register,需要访问uncache addr:0xA0000000
访问ram,需要访问cache addr:0x80000000
User Space/Kseg2/KSeg3 -> 0x20000000~0xFFFFFFFF(Physic)
0x00000000~0xFFFFFFFF
Virtual Address Physical Address
cacheable kseg3(512M) 0xE0000000 0x20000000~
cacheable kseg2(512M) 0xC0000000 0x20000000~
uncacheable kseg1(512M) 0xA0000000 0x00000000
cacheable kseg0(512M) 0x80000000 0x00000000
cacheable kuseg(2GB) 0x00000000 0x20000000~
//强制卸载
umount -l /mnt
dmesg命令可以查看开机的启动log,查看usb设备。
使用dmesg命令来识别出USB设备名
dmesg是一个重要的用于打印或者控制内核环形缓冲区的命令。环形缓冲区是一种数据结构,
它存放着内核操作数据的信息。
suspend入口:
echo "freeze" > /sys/power/state
echo "standby" > /sys/power/state
echo "mem" > /sys/power/state
有些进程会自动重启,无法完全kill掉,可以在/tmp路径下touch一个跟进程名称一样的文件,
这样可以避开这个问题。
WIFI模块中,AP和STA模式中分别意思是{
1、AP:也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。
一般家庭或办公室使用的无线路由器就是一个AP。
2、STA站点就是每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
}
修改MAC地址{
//wlan无线
ifconfig wlan0 down
ifconfig wlan0 hw ether 24:72:60:46:A7:CF
ifconfig wlan0 up
//eth网口
ifconfig eth0 down
ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX
ifconfig eth0 up
Robot log tool,MQTT server连接:
深圳MQTT server:1. IP: 10.6.3.13 szsa03
/usr/mnt_app/run_cleaner.sh
修改WIFI AP,深圳的WIFI AP:Robot 1qaz2wsx
setup_wifi_connection()
{
if [ ! -f /usr/mnt_app/cfg/wifi.conf ]; then
sed '/network={/,/}/d' /etc/wpa_supplicant.conf > /tmp/wpa_supplicant.conf
wpa_passphrase Robot 1qaz2wsx >> /tmp/wpa_supplicant.conf &
else
cp /usr/mnt_app/cfg/wifi.conf /tmp/wpa_supplicant.conf
fi
wpa_supplicant -B -i wlan0 -c /tmp/wpa_supplicant.conf > /dev/null 2>&1 &
udhcpc -i wlan0 > /dev/null 2>&1 &
}
1、iwlist 命令:{
用于对/proc/net/wireless文件进行分析,得出无线网卡相关信息
# iwlist wlan0 scanning 搜索当前无线网络
# iwlist wlan0 frequen 显示频道信息
# iwlist wlan0 rate 显示连接速度
# iwlist wlan0 power 显示电源模式
# iwlist wlan0 txpower 显示功耗
# iwlist wlan0 retry 显示重试连接次数(网络不稳定查看)
# iwlist wlan0 ap 显示热点信息
# iwlist --help 显示帮助信息
# iwlist --version 显示版本信息
}
2、iwconfig {
系统配置无线网络设备或显示无线网络设备信息。iwconfig 命令类似于ifconfig命令,
但是他配置对象是无线网卡,它对网络设备进行无线操作,如设置无线通信频段
auto 自动模式
essid 设置ESSID
nwid 设置网络ID
freq 设置无线网络通信频段
chanel 设置无线网络通信频段
sens 设置无线网络设备的感知阀值
mode 设置无线网络设备的通信设备
ap 强迫无线网卡向给定地址的接入点注册
nick<名字> 为网卡设定别名
rate<速率> 设定无线网卡的速率
rts<阀值> 在传输数据包之前增加一次握手,确信信道在正常的
power 无线网卡的功率设置
}
WIFI配置:{
//追加WIFI SSID
wpa_passphrase Robot 1qaz2wsx >> /tmp/wpa_supplicant.conf
//使能wlan0
ifconfig wlan0 down
ifconfig wlan0 up
//获取wifi状态
wpa_cli -iwlan0 -p /tmp/wpa_supplicant status | grep wpa_state
//连线AP的方式
都在沒有透過rvc-client的情況下
1. 直接輸入 /usr/mnt_algorithm/bin/connect_ap.sh robot_test Alizsz667
看是否可以看到COMPLETED
有看到的話,再輸入 udhcpc -i wlan0
看能不能要到ip,重開,一樣是在沒有連線的情況下
2. 先輸入
/usr/mnt_algorithm/bin/set_wifi_mode.sh 0
看ifconfig是否有出現wlan0, wlan1
如果有的話輸入
/usr/mnt_algorithm/bin/connect_ap.sh robot_test Alizsz667
後面同1. 的流程
//
wpa_passphrase Ali_sz Alizsz666 >> /tmp/wpa_supplicant.conf &
wpa_supplicant -B -i wlan0 -c /tmp/wpa_supplicant.conf > /dev/null 2>&1 &
udhcpc -i wlan0 > /dev/null 2>&1 &
//重新连接其他的WIFI AP
# ./usr/mnt_algorithm/bin/disconnect_ap.sh
# ./usr/mnt_algorithm/bin/connect_ap.sh Robot 1qaz2wsx
grep指令{
grep -srn "PLATFORM" ./ --binary-files=without-match
}
查看已经加载的驱动模块的信息:{
lsmod 能够显示驱动的大小以及被谁使用
cat /proc/modules 能够显示驱动模块大小、在内核空间中的地址
cat /proc/devices 只显示驱动的主设备号,且是分类显示
/sys/module 下面存在对应的驱动的目录,目录下包含驱动的分段信息等等。
}
echo "test" > /sys/power/wake_lock ,让系统不要进入睡眠模式。
addr2line debug:
~/output/host/opt/ext-toolchain-for-mcu-arm/bin/arm-none-eabi-addr2line -e stm32f103ve_bank2_app.elf -f 08039516
Dos删除文件指令{
/f 表示强制删除文件
/s 表示子目录都要删除该文件
/q 表示无声,不提示
/a 根据属性选择要删除的文件
D:\>del D:\Robot\*.* /f /s /q /a
Dos删除空文件夹指令:
D:\>rd D:\Robot\ /s /q
/e 表示子目录包括空目录都复制
//Dos拷贝
copy c:\hello\11.txt d:\word
xcopy c:\hello d:\word /s /e
}