1、环境变量
(1)打印环境变量:ehco $PATH(目录导出到环境变量后,里面的文件才能跨文件执行)
(2)添加到环境变量(一般放在当前用户的宿主目录~/下的.bashrc文件里):export PATH=/usr/local/bin:$PATH
解释:每一次用户在打开一个终端时,都会附带执行一次.bashrc
2、符号链接
(1)软连接:(ln -s 源文件名 符号链接名)例如:ln -s src.c linker.c 删除源文件后,软连接文件失效,可以连接目录
(2)硬连接:(ln 源文件名 符号链接名) 删除源文件后,硬链接文件还在,不能连接目录
解释:硬链接不占用磁盘空间,共用一个inode(http://blog.51cto.com/jk6627/1949090)
软连接占用软链接的inode号不一样,链接文件B的数据中仅存储了一个路径指向A,只占用3个byte
3、压缩与解压缩dir 文件
(1)tar -czvf dir.tar.gz dir/ 将dir目录压缩成dir.tar.gz
tar -zxvf dir.tar.gz dir.tar,gz解压缩
(2)tar -cjvf dir.tar.bz2 dir/ 将dir目录压缩成dir.tar.bz2
tar -jxvf dir.tar.bz2 dir.tar.bz2解压缩
4、查找文件和内容
(1)find 路径 -name "文件名" 查找文件放哪里
(2)grep -nr "某个词" 查找内容 n表示查找结果中显示行号,-r 递归查找
(3)which 应用程序 比如which ls 查找一个应用程序在哪里
(4)vi命令模式下输入/xxx 查找到xxx
(5)vi设置显示行号输入:num 代码或内容显示行号
(6)快速切换到某行输入:set nu 快速切换到num行
5、目标板挂载nfs
(1)mount -t nfs -o nolock 192.168.1.141:/home/aston/rootfs /mnt
解释:Ubuntu搭建了NFS服务器后,就是促使Servers上的文件能被其他的机器mount,而达到资源共享,比如在目标板上要执行Ubuntu中的可执行程序,或要cp到目标板,机器(arm板)主动去使用nfs方式去挂载到servers(ubuntu),linux内核配置meuncofig时要选择nfs模块
6、tftp加载文件(ubuntu搭建好tftp-server后,会有一个自己定义专用的目录用来传输文件比如:tftpboot目录)
(1)本地测试;在本地一个目录下使用命令: tftp localhost,进入tftp命令行
使用命令: get a.c ,这个目录下多一个a.c
使用命令: q ,即可退出命令行(具体还有很多操作命令)
(2)远程测试;比如将编译好的zImage加载到开发板的内存地址DDR去启动内核,uboot本身内置了tftp-client
在开发板uboot命令行下使用:tftp 0x30008000 zImage
7、uboot命令行烧录kernel、roofts到外部spiflash
mw.b 0x82000000 ff 0x300000 (mw.b:二进制写内存; 0x82000000: 内存首地址; 0xff:值; 0x1000000:size)
tftp 0x82000000 uImage_hi3518ev200 (下载文件到内存)
sf probe 0 (选择spiflash)
sf erase 0x100000 0x300000 (擦除)
sf write 0x82000000 0x100000 0x300000(将内存内容写入spi flash)
8、uboot命令行设置bootcmd和bootargs
7.1 命令:set bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
(1)选择spiflash,命令:sf probe 0
(2)将sflash的0x10000地址处内容读取0x300000个字节到内存地址0x82000000(DDR物理地址就是这个)
(3)在0x82000000处启动,命令:bootm 0x82000000(比如0x100000存放的是kernel,则启动内核)
7.2 命令:set bootargs mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)
(1)整个DDR被划分为两部分:系统内存和mmz。mem=32M,比如HIS3518的DDR共有64M,告诉kernel留给linux 系统的内存只有32M,其他的32M给mpp,后面也要传参?
(2)控制台参数。console=ttyAMA0,115200表示使用串口0作为控制台设备 波特率为115200
(3)表示根文件系统所在的设备分区,mtdblock2表示根文件系统对应mtdparts中的rootfs,从第0个算
(4)根文件系统类型,请根据烧写的文件系统类型配置,此处为jffs2,告诉内核文件系统类型
(5)SPI Flash对应取值hi_sfc,Nand Flash对应取值hinand;size表示分区大小 name表示分区名称
(6)参考博客https://blog.youkuaiyun.com/peng_apple/article/details/54315218
9、手动制作rootf命令
命令:mkfs.jffs2 -d rootfs_uclibc -l -e 0x10000 -o rootfs_uclibc_64k.jffs2
(1) mkfs.jffs2是用来制作.jffs2文件系统格式的工具(mkfs.jffs2需要 安装对应的软件包,在YAFFS2源文件的utils目录下,执行make就可以生成 mkyaffs2image工具,安装mkfs.jffs2 https://blog.youkuaiyun.com/lwg19870804/article/details/41448809)
(2)0x10000制作rootfs时指定块的大小;
- 创建文件系统时,可以指定块的大小。如果将来在你的文件系统中是一些比较大的文件的话,使用较大的块大小将得到较好的性能。将ext2文件系统的块大小调整为4096byte而不是缺省的1024byte,可以减少文件碎片,加快fsck扫描的速度和文件删除以及读操作的速度。
- 使用多大的块大小,需要根据你的系统综合考虑,如果系统用作邮件或者新闻服务器,使用较大的块大小,虽然性能有所提高,但会造成磁盘空间较大的浪费。比如文件系统中的文件平均大小为2145byte,如果使用4096byte的块大小,平均每一个文件就会浪费1951byte空间。如果使用 1024byte 的块大小,平均每一个文件会浪费927byte空间。在性能和磁盘的代价上如何平衡,要看具体应用的需要。
(3)具体参数:博客https://blog.youkuaiyun.com/itismine/article/details/4775824
10、截取指定内容输出到另一个文件
命令:find -name "a.c" -print -exec cat {} \; | grep "li" | sed 's/[[:space:]]//g' | cut -d"\"" -f2 > b.c
(1)find ./ -name "a.c" -print -exec cat {} \; 当前目录下找到文件a.c文件,打印并执行cat命令,{} \是命令格式而已
(2)管道 | 表示前面语句的输出作为后面语句的输入
(3)grep "li" 查找到与内容li相关的行
(4)sed 's/[[:space:]]//g' 把li相关的行里面的空格字符去掉,比如libowen 26 "abc" 变成libowen26"abc"
(5) cut -d"\"" -f2 以"作为列分隔符,输出第二列到b.c
11、查看可执行文件使用了哪些动态库
命令:ldd 可执行文件
(1)作用是可以在一个使用了共享库的程序执行之前解析出这个程序使用了哪些共享库,并且查看这些共享库是否能被找到,能被解析(决定这个程序是否能正确执行)。
12、环境变量
(1)echo $PATH打印PATH这个环境变量的值(在环境变量前要加$),将路径添加到PATH环境变量,这样该路径下的可执行文件或脚本可以在任意路径下执行,否则会提示找不到该执行文件或脚本添加方式到PATH的方式:export PATH=/usr/local/bin:$PATH
(2)命令行下执行export后可以查看系统中所以的环境变量