zoukankan      html  css  js  c++  java
  • 嵌入式Linux软链接使用技巧

    软链接概述

    软链接是Linux下常用的一种共享文件方式、目录的方式,这种方式类似于Windows下的快捷方式。一般一个文件或者目录在不同的路径都需要的时候,可以通过创建软链接的方式来共享,这样只系统下面只有一份源文件、目录。另外,巧用软链接,可以大大增加应用程序的可移植性。

    软链接创建与删除

    软链接创建与删除比较简单,使用ln命令创建链接文件,格式如下:

    ln  -s  [源文件或目录]  [目标文件或目录]
    

    示例:
    建立一个指向/usr/local/www的软链接到/tmp下面:

    $: ln -s /usr/local/www /tmp/www
    $: ls /tmp/www -l
    $: lrwxrwxrwx 1 fens     fens       14 9月  12 08:56 www -> /usr/local/www
    

    删除软链接:

    rm /tmp/www 
    

    注意: 删除的时候,如果是目录,结尾时,不要加“/”,不然会把指向的目录给删掉!

    软链接使用技巧

    共享目录文件

    一般做嵌入式Linux开发,linux的虚拟机都会安装好多平台的交叉编译器,这些编译器可能会用到一些库,库在使用的时候,需要将头文件放到编译器的路径下面,这样程序编译的时候,会自动找到头文件,这里以boost库为例。
    下面是我的虚拟机里:

    drwxr-xr-x 12 1007 users 4.0K 7月  18  2019 arm-himix200-linux
    drwxr-xr-x  9 root root  4.0K 1月  24  2017 arm-hisiv300-linux
    drwxr-xr-x 10  520   520 4.0K 5月   5  2019 arm-hisiv500-linux
    drwxr-xr-x 10  520   520 4.0K 6月   9 10:30 arm-hisiv600-linux
    

    boost库由于85%的模块只需要引用头文件就可以使用,所以使用也比较方便,不用编译;所以库文件也比较大,在每一种编译器下都会使用,通过建软链接的方式共享文件,也减少了磁盘空间占用,下面是我建立的软链接:

    $ls arm-himix200-linux/target/usr/include/boost -l
    lrwxrwxrwx 1 root root 10 7月  19  2018 arm-himix200-linux/target/usr/include/boost -> /opt/boost
    
    $ls arm-hisiv300-linux/target/usr/include/boost -l
    lrwxrwxrwx 1 root root 10 5月  12  2018 arm-hisiv300-linux/target/usr/include/boost -> /opt/boost
    
    $ls arm-hisiv500-linux/target/usr/include/boost -l
    lrwxrwxrwx 1 root root 10 7月  30  2019 arm-hisiv500-linux/target/usr/include/boost -> /opt/boost
    
    $ls arm-hisiv600-linux/target/usr/include/boost -l
    lrwxrwxrwx 1 root root 10 7月  30  2019 arm-hisiv600-linux/target/usr/include/boost -> /opt/boost
    

    统一设备文件名,增强应用程序可移植性

    不同平台的嵌入式Linux下,可能设备文件名、GPIO编号不一样,比如有的平台下,串口设备名称为:ttySxx, 有的则是ttyAMAxx;这个产品的运行指示灯是gpio51控制,另一个产品是gpio32等。

    所以不同平台的应用程序中要么加编译开关,宏定义来区分不同平台的设备文件名称,这样会导致代码臃肿,可读性查,不同平台需要不同编译开关,容易出错。

    而使用软链接可以很好的解决这一问题,可以自己创建一个dev目录(位置自己定),我习惯和应用程序放在同级目录下。
    然后将这些设备文件用软链接来统一名称如:

    平台1:

    $ cd /usr/local/dev
    $ ln -s /dev/ttyS1 ./com1
    $ ln -s /dev/ttyS2 ./com2
    $ ln -s /dev/ttyS3 ./com3
    $ ln -s /sys/class/leds/led_orange/brightness ./runLed
    $ ln -s /sys/class/gpio/gpio211/value ./powerLed
    $ ls -l
    #忽略我错误的时间
    lrwxrwxrwx 1 fens fens 10 1月   1  2000 com1 -> /dev/ttyS1
    lrwxrwxrwx 1 fens fens 10 1月   1  2000 com2 -> /dev/ttyS2
    lrwxrwxrwx 1 fens fens 11 1月   1  2000 com3 -> /dev/ttyS3
    lrwxrwxrwx 1 fens fens 29 1月   1  2000 power -> /sys/class/gpio/gpio211/value
    lrwxrwxrwx 1 fens fens 37 1月   1  2000 runLed -> /sys/class/gpio/gpio212/value
    

    平台2:

    $ cd /usr/local/dev
    $ ln -s /dev/ttyAMA1 ./com1
    $ ln -s /dev/ttyAMA2 ./com2
    $ ln -s /dev/ttyAMA3 ./com3
    $ ln -s /sys/class/leds/led_orange/brightness ./runLed
    $ ln -s /sys/class/gpio/gpio211/value ./powerLed
    $ ls -l
    #忽略我错误的时间
    lrwxrwxrwx 1 fens fens 10 1月   1  2000 com1 -> /dev/ttyAMA1 
    lrwxrwxrwx 1 fens fens 10 1月   1  2000 com2 -> /dev/ttyAMA2
    lrwxrwxrwx 1 fens fens 11 1月   1  2000 com3 -> /dev/ttyAMA3
    lrwxrwxrwx 1 fens fens 29 1月   1  2000 power -> /sys/class/gpio/gpio41/value
    lrwxrwxrwx 1 fens fens 37 1月   1  2000 runLed -> /sys/class/gpio/gpio42/value
    

    这样只需要增加一个创建软链接的脚本,在系统启动的时候调用一下,就可以解决不同平台设备文件不一样的问题,应用程序不用修改,驱动也不用改。

    在实际应用中,还有更多技巧有待大家去探索,这里只是抛砖引玉,有比较好的技巧也可以在下面留言里留下来,一起交流学习!

    微信公众号:fensnote

  • 相关阅读:
    Maidsafe-去中心化互联网白皮书
    The Top 20 Cybersecurity Startups To Watch In 2021 Based On Crunchbase
    Top 10 Blockchain Security and Smart Contract Audit Companies
    The 20 Best Cybersecurity Startups To Watch In 2020
    Blockchain In Cybersecurity: 11 Startups To Watch In 2019
    004-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-在阿里云物联网平台上一型一密动态注册设备(Android)
    涂鸦开发-单片机+涂鸦模组开发+OTA
    000-ESP32学习开发-ESP32烧录板使用说明
    03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序
    03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)
  • 原文地址:https://www.cnblogs.com/fensnote/p/13655892.html
Copyright © 2011-2022 走看看