Linux下挂载和文件拷贝、库引用
一、将linux下文件复制到挂载的设备目录下
Linux下mnt目录和nfsroot目录在根目录下。
假设我用户目录x1021app下有一个文件GBK16,我想要放到我挂载的某个嵌入式产品的某个目录下。
第一步:需要先把用户目录下的GBK16文件拷贝到根目录的nfsroot文件共享目录下。
在用户路径下执行命令:cp x1021app/GBK16 /nfsroot/GBK16
此时linux下的nfsroot目录下已经有了GBK16文件。
第二步:给设备连网,执行挂载命令,IP地址为linuxIP地址,目的是通过mnt挂载到linux上的nfsroot下,如果挂载成功,设备下的mnt目录下的文件就会和linux下的nfsroot目录下的文件保持一致(如果没有该文件可以自己创建,给777权限)。
1、挂载首先要安装nfs服务:sudo apt-get install nfs-kernel-server rpcbind,安装完重启服务:sudo /etc/init.d/nfs-kernel-server restart
2、挂载要ubuntu联上网并且能ping通设备。此时要保证网段一致。
如果虚拟机没有联网(不能访问浏览器),可将虚拟机设置为桥接模式
如果windows系统下适配器下VMnet8或VMnet1丢失可执行上图的“还原默认设置”。
设置完如上步骤虚拟机可以联网并且能ping通设备,如果不行自行百度。
3、如果挂载提示:no root to host,可能是防火墙没有关闭的原因,查看:firewall-cmd --state,如果没有安装则按提示安装。
4、执行完上述步骤如果挂载时还提示错误信息:Permission denied (没有权限,拒接访问)
cd /etc 跳转到该目录sudo gedit exports(配置该文件),在最后插入:/nfsroot *(rw,sync,no_root_squash)
保存退出后执行:更新配置文件:exportfs -a表示更新所有,然后再执行重启NFS服务:sudo service nfs-kernel-server restart
如果提示busy可以重启设备再挂载,如果没有错误可在ubuntu的nfsroot文件下mkdir test创建一个文件,看看设备的mnt文件夹下是否同样有这个文件。
mount -t nfs 192.168.1.237:/nfsroot /mnt -o nolock
5、优先执行上述命令,如果有的开发板执行如上命令报错:mount.nfs: an incorrect mount option was specified 或者提示:mount: can't find /mnt in /etc/fstab 此时我们用如下命令挂载:
mount -t nfs -o vers=4 192.168.0.128:/nfsroot /mnt (vers=4:表示指定使用那个版本) 取消挂载用:umount /mnt
提示错误:mount.nfs: /mnt is busy or already mounted 表示已经挂载过了
提示错误:failed: Input/output error ,此时我们可以先ping一下挂载的IP地址看是否能ping通,这里我们ping的时候提示:ping: sendto: Network is unreachable,由图是.1网段,电脑是.0网段,使用.1网段时是可以挂载的。
使用命令修改IP地址:ifconfig eth0 192.168.0.127,执行后使用ifconfig查看确实改变了,挂载成功。但是重启后会变回之前的.126。需要将其写到配置文件,利用/etc/inittab的系统启动设置,/etc/inittab中有(或者自己添加)
::sysinit:/etc/rc.local 表示设备重启时回去执行/etc/rc.local中的配置,那么往/etc/rc.local中写入ip的配置命令,即可
设置IP: ifconfig eth0 192.168.0.127
设置网关:route add default gw 192.168.0.1
在linux下的nfsroot目录下执行删除命令删除GBK16文件,设备端的mnt目录下的GBK16文件也就看不到了。
第三步:执行CP命令将设备mnt目录下的文件复制到你想要放置的目录即可。
cp /mnt/GBK16 /usr/data/GBK16 -f
二、将设备下的文件复制到linux目录下
如果想要把设备下的某个文件复制到linux目录下也先将文件放到设备下的mnt目录下即可,这时候在linux下的nfsroot目录下也可以响应的查到,然后再linux用户目录下执行复制命令即可。
然后再linux用户目录下执行复制命令即可:cp /nfsroot/HZK16 x1021app/HZK16
三、linux下库引用
一般大型工程代码有很多文件,如存放用户.C文件的,存放头文件的,存放库文件的lib,以及makefile文件。
1、.a库的引用
(1)、首先将第三方.a库文件放到工程lib文件夹下。
(2)、在makefile下包含该库,编译后就能引用该库里的函数了。
2、.so库的引用
(1)、通样需要将第三方.so库文件放到工程lib文件夹下。
(2)、该库文件同样需要放到开发板的存放库的目录下
(3)、开发板挂载到linux后需要设置环境变量(针对开发板):export LD_LIBRARY_PATH=/usr/data/lib/:$LD_LIBRARY_PATH //设置环境变量,不设置会出现库已经放到目录下仍然提示找不到库的错误
示例:
第一步:eth0_up.sh
第二步:udhcpc -b -i eth0 -R //让设备连网
第三步:mount -t nfs 192.168.1.237:/nfsroot /mnt -o nolock
第四步:如果没库去复制库,有库执行第五步
第五步:export LD_LIBRARY_PATH=/usr/data/lib/:$LD_LIBRARY_PATH
第六步:跳转到mnt目录下ls打开
第七步:./app运行mnt下的APP程序