軟鏈接概述
軟鏈接是Linux下常用的一種共享文件方式、目錄的方式,這種方式類(lèi)似于Windows下的快捷方式。一般一個(gè)文件或者目錄在不同的路徑都需要的時(shí)候,可以通過(guò)創(chuàng)建軟鏈接的方式來(lái)共享,這樣系統(tǒng)下面只有一份源文件、目錄。另外,巧用軟鏈接,可以大大增加應(yīng)用程序的可移植性。
軟鏈接創(chuàng)建與刪除
軟鏈接創(chuàng)建與刪除比較簡(jiǎn)單,使用ln命令創(chuàng)建鏈接文件,格式如下:
1ln??-s??[源文件或目錄](méi)??[目標(biāo)文件或目錄](méi)
示例:
建立一個(gè)指向/usr/local/www的軟鏈接到/tmp下面:
1$:?ln?-s?/usr/local/www?/tmp/www
2$:?ls?/tmp/www?-l
3$:?lrwxrwxrwx?1?fens?????fens???????14?9月??12?08:56?www?->?/usr/local/www
刪除軟鏈接:
1rm?/tmp/www?
注意:刪除的時(shí)候,如果是目錄,結(jié)尾時(shí),不要加“/”,不然會(huì)把指向的目錄給刪掉!
軟鏈接使用技巧
共享目錄文件
一般做嵌入式Linux開(kāi)發(fā),linux的虛擬機(jī)都會(huì)安裝好多平臺(tái)的交叉編譯器,這些編譯器可能會(huì)用到一些庫(kù),庫(kù)在使用的時(shí)候,需要將頭文件放到編譯器的路徑下面,這樣程序編譯的時(shí)候,會(huì)自動(dòng)找到頭文件,這里以boost庫(kù)為例。
下面是我的虛擬機(jī)里:
1drwxr-xr-x?12?1007?users?4.0K?7月??18??2019?arm-himix200-linux
2drwxr-xr-x??9?root?root??4.0K?1月??24??2017?arm-hisiv300-linux
3drwxr-xr-x?10??520???520?4.0K?5月???5??2019?arm-hisiv500-linux
4drwxr-xr-x?10??520???520?4.0K?6月???9?10:30?arm-hisiv600-linux
boost庫(kù)由于85%的模塊只需要引用頭文件就可以使用,所以使用也比較方便,不用編譯;所以庫(kù)文件也比較大,在每一種編譯器下都會(huì)使用,通過(guò)建軟鏈接的方式共享文件,也減少了磁盤(pán)空間占用,下面是我建立的軟鏈接:
1$ls?arm-himix200-linux/target/usr/include/boost?-l
2lrwxrwxrwx?1?root?root?10?7月??19??2018?arm-himix200-linux/target/usr/include/boost?->?/opt/boost
3
4$ls?arm-hisiv300-linux/target/usr/include/boost?-l
5lrwxrwxrwx?1?root?root?10?5月??12??2018?arm-hisiv300-linux/target/usr/include/boost?->?/opt/boost
6
7$ls?arm-hisiv500-linux/target/usr/include/boost?-l
8lrwxrwxrwx?1?root?root?10?7月??30??2019?arm-hisiv500-linux/target/usr/include/boost?->?/opt/boost
9
10$ls?arm-hisiv600-linux/target/usr/include/boost?-l
11lrwxrwxrwx?1?root?root?10?7月??30??2019?arm-hisiv600-linux/target/usr/include/boost?->?/opt/boost
統(tǒng)一設(shè)備文件名,增強(qiáng)應(yīng)用程序可移植性
不同平臺(tái)的嵌入式Linux下,可能設(shè)備文件名、GPIO編號(hào)不一樣,比如有的平臺(tái)下,串口設(shè)備名稱(chēng)為:ttySxx, 有的則是ttyAMAxx;這個(gè)產(chǎn)品的運(yùn)行指示燈是gpio51控制,另一個(gè)產(chǎn)品是gpio32等。
所以不同平臺(tái)的應(yīng)用程序中要么加編譯開(kāi)關(guān),宏定義來(lái)區(qū)分不同平臺(tái)的設(shè)備文件名稱(chēng),這樣會(huì)導(dǎo)致代碼臃腫,可讀性查,不同平臺(tái)需要不同編譯開(kāi)關(guān),容易出錯(cuò)。
而使用軟鏈接可以很好的解決這一問(wèn)題,可以自己創(chuàng)建一個(gè)dev目錄(位置自己定),我習(xí)慣和應(yīng)用程序放在同級(jí)目錄下。
然后將這些設(shè)備文件用軟鏈接來(lái)統(tǒng)一名稱(chēng)如:
平臺(tái)1:
1$?cd?/usr/local/dev
2$?ln?-s?/dev/ttyS1?./com1
3$?ln?-s?/dev/ttyS2?./com2
4$?ln?-s?/dev/ttyS3?./com3
5$?ln?-s?/sys/class/leds/led_orange/brightness?./runLed
6$?ln?-s?/sys/class/gpio/gpio211/value?./powerLed
7$?ls?-l
8#忽略我錯(cuò)誤的時(shí)間
9lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com1?->?/dev/ttyS1
10lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com2?->?/dev/ttyS2
11lrwxrwxrwx?1?fens?fens?11?1月???1??2000?com3?->?/dev/ttyS3
12lrwxrwxrwx 1 fens fens 29 1月?? 1 2000 power ->?/sys/class/gpio/gpio211/value
13lrwxrwxrwx 1 fens fens 37 1月?? 1 2000 runLed ->?/sys/class/gpio/gpio212/value
平臺(tái)2:
1$?cd?/usr/local/dev
2$?ln?-s?/dev/ttyAMA1?./com1
3$?ln?-s?/dev/ttyAMA2?./com2
4$?ln?-s?/dev/ttyAMA3?./com3
5$?ln?-s?/sys/class/leds/led_orange/brightness?./runLed
6$?ln?-s?/sys/class/gpio/gpio211/value?./powerLed
7$?ls?-l
8#忽略我錯(cuò)誤的時(shí)間
9lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com1?->?/dev/ttyAMA1?
10lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com2?->?/dev/ttyAMA2
11lrwxrwxrwx?1?fens?fens?11?1月???1??2000?com3?->?/dev/ttyAMA3
12lrwxrwxrwx 1 fens fens 29 1月?? 1 2000 power ->?/sys/class/gpio/gpio41/value
13lrwxrwxrwx 1 fens fens 37 1月?? 1 2000 runLed ->?/sys/class/gpio/gpio42/value
這樣只需要增加一個(gè)創(chuàng)建軟鏈接的腳本,在系統(tǒng)啟動(dòng)的時(shí)候調(diào)用一下,就可以解決不同平臺(tái)設(shè)備文件不一樣的問(wèn)題,應(yīng)用程序不用修改,驅(qū)動(dòng)也不用改。
微信公眾號(hào):fensnote