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程序

 

posted @ 2022-11-30 15:23  耿通宇  阅读(318)  评论(0编辑  收藏  举报