sys文件夾linux
❶ 在linux 中, /sys 目錄是將內核的一些信息映射,可供應用程序所用,那麼/proc的作用與之有何區別呢
proc文件系統是一個偽文件系統,它只存在內存當中,而不佔用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供介面。用戶和應用程序可以通過proc得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息並提交的。
sysfs 與 proc 相比有很多優點,最重要的莫過於設計上的清晰。一個 proc 虛擬文件可能有內部格式,如 /proc/scsi/scsi ,它是可讀可寫的,(其文件許可權被錯誤地標記為了 0444 !,這是內核的一個BUG),並且讀寫格式不一樣,代表不同的操作,應用程序中讀到了這個文件的內容一般還需要進行字元串解析,而在寫入時需要先用字元串格式化按指定的格式寫入字元串進行操作;相比而言, sysfs 的設計原則是一個屬性文件只做一件事情, sysfs 屬性文件一般只有一個值,直接讀取或寫入。整個 /proc/scsi 目錄在2.6內核中已被標記為過時(LEGACY),它的功能已經被相應的 /sys 屬性文件所完全取代。新設計的內核機制應該盡量使用 sysfs 機制,而將 proc 保留給純凈的「進程文件系統」。
❷ linux屬性att文件 sys怎麼操作
Sys文件系統是一個類似於proc文件系統的特殊文件系統,用於將系統中的設備組織成層次結構,並向用戶模式程序提供詳細的內核數據結構信息。其實,就是 在用戶態可以通過對sys文件系統的訪問,來看內核態的一些驅動或者設備等。
去/sys看一看,
localhost:/sys#ls
/sys/ block/ bus/ class/ devices/ firmware/ kernel/ mole/ power/
Block目錄:包含所有的塊設備,進入到block目錄下,會發現下面全是link文件,link到sys/device/目錄下的一些設備。
Devices目錄:包含系統所有的設備,並根據設備掛接的匯流排類型組織成層次結構
Bus目錄:包含系統中所有的匯流排類型
Drivers目錄:包括內核中所有已注冊的設備驅動程序
Class目錄:系統中的設備類型(如網卡設備,音效卡設備等)。去class目錄中看
一下,隨便進到一個文件夾下,會發現該文件夾下的文件其實是連接文件,link到/sys/device/.../../...下的一個設備文件。
可以說明,其實class目錄並不會新建什麼設備,只是將已經注冊的設備,在class目錄下重新歸類,放在一起。
1,在sys下,表示一個目錄使用的結構體是 Kobject,但是在linux的內核中,有硬體的設備 和 軟體的驅動,在sys下都需要用一個目錄來表示。 單純的一個Kobject結構無法表示完全,增加了容器,來封裝Kobject。 即下面要將的:device和drive_device結構。
2,
最底層驅動目錄的上一層目錄,從sys角度上來說,他依然是個目錄,所以他也有Kobjec這個變數。但是從他的意義上講,他將
一些有公共特性Kobjec 的
device/driver_device結構組織到了一起,所以除了有Kobject這個變數外,他又添加了一些變數,組成了Kset這個結構來表示這
一級的目錄。但是僅僅是用Kset來表示了這一級的目錄,和1,一樣,僅僅表示一個目錄是不夠的,在linux內核中,需要他在軟體上有個映射。所以,也
將Kset進行了封裝,形成了
bus_type這個結構。
3, kobject在Kset的目錄下,那麼 device/device_driver 就在 bus_type結構下。所以,linux驅動模型中,驅動和設備都是掛在匯流排下面的。
4, 如上所述,Kset的意義:表示一個目錄(由結構體下的Kobject來完成),並且這個目錄下的所有目錄有共同的特性(所以說,Kset表示的目錄下,不一定非要是Kobject街頭的,也可以是Kset結構的。即:Kset嵌套Kset)。所以使用Kset來代替了以前的 subsystem結構。
❸ linux 下/sys/class/gpio 怎麼注冊
通過sysfs方式控制GPIO,先訪問/sys/class/gpio目錄,向export文件寫入GPIO編號,使得該GPIO的操作介面從內核空間暴露到用戶空間,GPIO的操作介麵包括direction和value等,direction控制GPIO方向,而value可控制GPIO輸出或獲得GPIO輸入。文件IO方式操作GPIO,使用到了4個函數open、close、read、write。
首先,看看系統中有沒有「/sys/class/gpio」這個文件夾。如果沒有請在編譯內核的時候加入 Device Drivers-> GPIO Support ->/sys/class/gpio/… (sysfs interface)。
/sys/class/gpio 的使用說明:
gpio_operation 通過/sys/文件介面操作IO埠 GPIO到文件系統的映射
◇ 控制GPIO的目錄位於/sys/class/gpio
◇ /sys/class/gpio/export文件用於通知系統需要導出控制的GPIO引腳編號
◇ /sys/class/gpio/unexport 用於通知系統取消導出
◇ /sys/class/gpio/gpiochipX目錄保存系統中GPIO寄存器的信息,包括每個寄存器控制引腳的起始編號base,寄存器名稱,引腳總數 導出一個引腳的操作步驟
◇ 首先計算此引腳編號,引腳編號 = 控制引腳的寄存器基數 + 控制引腳寄存器位數
◇ 向/sys/class/gpio/export寫入此編號,比如12號引腳,在shell中可以通過以下命令實現,命令成功後生成/sys/class/gpio/gpio12目錄,如果沒有出現相應的目錄,說明此引腳不可導出
◇ direction文件,定義輸入輸入方向,可以通過下面命令定義為輸出。direction接受的參數:in, out, high, low。high/low同時設置方向為輸出,並將value設置為相應的1/0
◇ value文件是埠的數值,為1或0
幾個例子:
1. 導出
/sys/class/gpio# echo 44 > export
2. 設置方向
/sys/class/gpio/gpio44# echo out > direction
3. 查看方向
/sys/class/gpio/gpio44# cat direction
4. 設置輸出
/sys/class/gpio/gpio44# echo 1 > value
5. 查看輸出值
/sys/class/gpio/gpio44# cat value
6. 取消導出
/sys/class/gpio# echo 44 > unexport
文件讀寫常式:
#include stdlib.h
#include stdio.h
#include string.h
#include unistd.h
#include fcntl.h //define O_WRONLY and O_RDONLY
//晶元復位引腳: P1_16
#define SYSFS_GPIO_EXPORT "/sys/class/gpio/export"
#define SYSFS_GPIO_RST_PIN_VAL "48"
#define SYSFS_GPIO_RST_DIR "/sys/class/gpio/gpio48/direction"
#define SYSFS_GPIO_RST_DIR_VAL "OUT"
#define SYSFS_GPIO_RST_VAL "/sys/class/gpio/gpio48/value"
#define SYSFS_GPIO_RST_VAL_H "1"
#define SYSFS_GPIO_RST_VAL_L "0"
int main()
{
int fd;
//打開埠/sys/class/gpio# echo 48 > export
fd = open(SYSFS_GPIO_EXPORT, O_WRONLY);
if(fd == -1)
{
printf("ERR: Radio hard reset pin open error.\n");
return EXIT_FAILURE;
}
write(fd, SYSFS_GPIO_RST_PIN_VAL ,sizeof(SYSFS_GPIO_RST_PIN_VAL));
close(fd);
//設置埠方向/sys/class/gpio/gpio48# echo out > direction
fd = open(SYSFS_GPIO_RST_DIR, O_WRONLY);
if(fd == -1)
{
printf("ERR: Radio hard reset pin direction open error.\n");
return EXIT_FAILURE;
}
write(fd, SYSFS_GPIO_RST_DIR_VAL, sizeof(SYSFS_GPIO_RST_DIR_VAL));
close(fd);
//輸出復位信號: 拉高>100ns
fd = open(SYSFS_GPIO_RST_VAL, O_RDWR);
if(fd == -1)
{
printf("ERR: Radio hard reset pin value open error.\n");
return EXIT_FAILURE;
}
while(1)
{
write(fd, SYSFS_GPIO_RST_VAL_H, sizeof(SYSFS_GPIO_RST_VAL_H));
usleep(1000000);
write(fd, SYSFS_GPIO_RST_VAL_L, sizeof(SYSFS_GPIO_RST_VAL_L));
usleep(1000000);
}
close(fd);
printf("INFO: Radio hard reset pin value open error.\n");
return 0;
}
另外參考網上一個網友的程序,這里做了驗證,並實現中斷檢測函數。如下:
#include stdlib.h
#include stdio.h
#include string.h
#include unistd.h
#include fcntl.h
#include poll.h
#define MSG(args...) printf(args)
//函數聲明
static int gpio_export(int pin);
static int gpio_unexport(int pin);
static int gpio_direction(int pin, int dir);
static int gpio_write(int pin, int value);
static int gpio_read(int pin);
static int gpio_export(int pin)
{
char buffer[64];
int len;
int fd;
fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd < 0) {
MSG("Failed to open export for writing!\n");
return(-1);
}
len = snprintf(buffer, sizeof(buffer), "%d", pin);
if (write(fd, buffer, len) < 0) {
MSG("Failed to export gpio!");
return -1;
}
close(fd);
return 0;
}
static int gpio_unexport(int pin)
{
char buffer[64];
int len;
int fd;
fd = open("/sys/class/gpio/unexport", O_WRONLY);
if (fd < 0) {
MSG("Failed to open unexport for writing!\n");
return -1;
}
len = snprintf(buffer, sizeof(buffer), "%d", pin);
if (write(fd, buffer, len) < 0) {
MSG("Failed to unexport gpio!");
return -1;
}
close(fd);
return 0;
}
//dir: 0-->IN, 1-->OUT
static int gpio_direction(int pin, int dir)
{
static const char dir_str[] = "in\0out";
char path[64];
int fd;
snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/direction", pin);
fd = open(path, O_WRONLY);
if (fd < 0) {
MSG("Failed to open gpio direction for writing!\n");
return -1;
}
if (write(fd, &dir_str[dir == 0 ? 0 : 3], dir == 0 ? 2 : 3) < 0) {
MSG("Failed to set direction!\n");
return -1;
}
close(fd);
return 0;
}
//value: 0-->LOW, 1-->HIGH
static int gpio_write(int pin, int value)
{
static const char values_str[] = "01";
char path[64];
int fd;
snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/value", pin);
fd = open(path, O_WRONLY);
if (fd < 0) {
MSG("Failed to open gpio value for writing!\n");
return -1;
}
if (write(fd, &values_str[value == 0 ? 0 : 1], 1) < 0) {
MSG("Failed to write value!\n");
return -1;
}
close(fd);
return 0;
}
static int gpio_read(int pin)
{
char path[64];
char value_str[3];
int fd;
snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/value", pin);
fd = open(path, O_RDONLY);
if (fd < 0) {
MSG("Failed to open gpio value for reading!\n");
return -1;
}
if (read(fd, value_str, 3) < 0) {
MSG("Failed to read value!\n");
return -1;
}
close(fd);
return (atoi(value_str));
}
// none表示引腳為輸入,不是中斷引腳
// rising表示引腳為中斷輸入,上升沿觸發
// falling表示引腳為中斷輸入,下降沿觸發
// both表示引腳為中斷輸入,邊沿觸發
// 0-->none, 1-->rising, 2-->falling, 3-->both
static int gpio_edge(int pin, int edge)
{
const char dir_str[] = "none\0rising\0falling\0both";
char ptr;
char path[64];
int fd;
switch(edge){
case 0:
ptr = 0;
break;
case 1:
ptr = 5;
break;
case 2:
ptr = 12;
break;
case 3:
ptr = 20;
break;
default:
ptr = 0;
}
snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/edge", pin);
fd = open(path, O_WRONLY);
if (fd < 0) {
MSG("Failed to open gpio edge for writing!\n");
return -1;
}
if (write(fd, &dir_str[ptr], strlen(&dir_str[ptr])) < 0) {
MSG("Failed to set edge!\n");
return -1;
}
close(fd);
return 0;
}
//GPIO1_17
int main()
{
int gpio_fd, ret;
struct pollfd fds[1];
char buff[10];
unsigned char cnt = 0;
//LED引腳初始化
gpio_export(115);
gpio_direction(115, 1);
gpio_write(115, 0);
//按鍵引腳初始化
gpio_export(49);
gpio_direction(49, 0);
gpio_edge(49,1);
gpio_fd = open("/sys/class/gpio/gpio49/value",O_RDONLY);
if(gpio_fd < 0){
MSG("Failed to open value!\n");
return -1;
}
fds[0].fd = gpio_fd;
fds[0].events = POLLPRI;
ret = read(gpio_fd,buff,10);
if( ret == -1 )
MSG("read\n");
while(1){
ret = poll(fds,1,0);
if( ret == -1 )
MSG("poll\n");
if( fds[0].revents & POLLPRI){
ret = lseek(gpio_fd,0,SEEK_SET);
if( ret == -1 )
MSG("lseek\n");
ret = read(gpio_fd,buff,10);
if( ret == -1 )
MSG("read\n");
gpio_write(115, cnt++%2);
}
usleep(100000);
}
return 0;
}
❹ linux系統下目錄和文件都有哪些,及一些文件的基本用途
目錄樹的主要部分有root(/)、/usr、/var、/home等等。下面是一個典型的linux目錄結構如下:
/ 根目錄
/bin 存放必要的命令
/boot 存放內核以及啟動所需的文件等
/dev 存放設備文件
/etc 存放系統的配置文件
/home 用戶文件的主目錄,用戶數據存放在其主目錄中
/lib 存放必要的運行庫
/mnt 存放臨時的映射文件系統,我們常把軟碟機和光碟機掛裝在這里的floppy和cdrom子目錄下。
/proc 存放存儲進程和系統信息
/root 超級用戶的主目錄
/sbin 存放系統管理程序
/tmp 存放臨時文件的目錄
/usr 包含了一般不需要修改的應用程序,命令程序文件、程序庫、手冊和其它文檔。
/var 包含系統產生的經常變化的文件,例如列印機、郵件、新聞等假離線目錄、日誌文件、格式化後的手冊頁以及一些應用程序的數據文件等等。建議單獨的放在一個分區。
----------------------
2.6的內核還有個/sys的目錄,內容和/proc差不多
❺ LINUX系統中/proc/sys/vm文件夾什麼存什麼的
是表示Linux調整虛擬內存和將一些特別數據寫入磁碟之用
其中從Kernel網站查看你的這個參數:
dirty_writeback_centisecs
The
pdflush
writeback
daemons
will
periodically
wake
up
and
write
`old'
data
out
to
disk.
This
tunable
expresses
the
interval
between
those
wakeups,
in
100'ths
of
a
second.
Setting
this
to
zero
disables
periodic
writeback
altogether.
字面上大概的理解是,觸發一個回寫進程,將Vm中的一些數據寫到磁碟上。如果值是0表示禁用此項。
-----------------
virtual
memory
(VM)
subsystem
of
the
Linux
kernel
即是虛擬內存的英文。。。
❻ linux的文件目錄都分別是什麼意思
根 (/) 目錄下,有一組重要的系統目錄,在大部分 Linux 發行版里都通用。直接位於根 (/) 目錄下的常見目錄列表如下:
/bin - 重要的二進制 (binary) 應用程序
/boot - 啟動 (boot) 配置文件
/dev - 設備 (device) 文件
/etc - 配置文件、啟動腳本等 (etc)
/home - 本地用戶主 (home) 目錄
/lib - 系統庫 (libraries) 文件
/lost+found - 在根 (/) 目錄下提供一個遺失+查找(lost+found) 系統
/media - 掛載可移動介質 (media),諸如 CD、數碼相機等
/mnt - 掛載 (mounted) 文件系統
/opt - 提供一個供可選的 (optional) 應用程序安裝目錄
/proc - 特殊的動態目錄,用以維護系統信息和狀態,包括當前運行中進程 (processes) 信息。
/root - root (root) 用戶主文件夾,讀作「slash-root」
/sbin - 重要的系統二進制 (system binaries) 文件
/sys - 系統 (system) 文件
/tmp - 臨時(temporary)文件
/usr - 包含絕大部分所有用戶(users)都能訪問的應用程序和文件
/var - 經常變化的(variable)文件,諸如日誌或資料庫等
❼ linux /sys下文件的讀寫創建和讀寫
sysfs的掛載點,內核用的。
❽ linux 下文件夾解釋
目錄結構及主要內容
「/」根目錄部分有以下子目錄:
/usr 目錄包含所有的命令、程序庫、文檔和其它文件。這些文件在正常操作中不會被改變的。這個目錄也包含你的Linux發行版本的主要的應用程序,譬如,Netscape。
/var 目錄包含在正常操作中被改變的文件:假離線文件、記錄文件、加鎖文件、臨時文件和頁格式化文件等。
/home 目錄包含用戶的文件:參數設置文件、個性化文件、文檔、數據、EMAIL、緩存數據等。這個目錄在系統省級時應該保留。
/proc 目錄整個包含虛幻的文件。它們實際上並不存在磁碟上,也不佔用任何空間。(用ls –l 可以顯示它們的大小)當查看這些文件時,實際上是在訪問存在內存中的信息,這些信息用於訪問系統
/bin 系統啟動時需要的執行文件(二進制),這些文件可以被普通用戶使用。
/sbin 系統執行文件(二進制),這些文件不打算被普通用戶使用。(普通用戶仍然可以使用它們,但要指定目錄。)
/etc 操作系統的配置文件目錄。
/root 系統管理員(也叫超級用戶或根用戶)的Home目錄。
/dev 設備文件目錄。LINUX下設備被當成文件,這樣一來硬體被抽象化,便於讀寫、網路共享以及需要臨時裝載到文件系統中。正常情況下,設備會有一個獨立的子目 錄。這些設備的內容會出現在獨立的子目錄下。LINUX沒有所謂的驅動符。
/lib 根文件系統目錄下程序和核心模塊的共享庫。
/boot 用於自舉載入程序(LILO或GRUB)的文件。當計算機啟動時(如果有多個操作系統,有可能允許你選擇啟動哪一個操作系統),這些文件首先被裝載。這個目錄也會包含LINUX核(壓縮文件vmlinuz),但LINUX核也可以存在別處,只要配置LILO並且LILO知道LINUX核在哪兒。
/opt 可選的應用程序,譬如,REDHAT 5.2下的KDE (REDHAT 6.0下,KDE放在其它的XWINDOWS應用程序中,主執行程序在/usr/bin目錄下)
/tmp 臨時文件。該目錄會被自動清理干凈。
/lost+found 在文件系統修復時恢復的文件
「/usr」目錄下比較重要的部分有:
/usr/X11R6 X-WINDOWS系統(version 11, release 6)
/usr/X11 同/usr/X11R6 (/usr/X11R6的符號連接)
/usr/X11R6/bin 大量的小X-WINDOWS應用程序(也可能是一些在其它子目錄下大執行文件的符號連接)。
/usr/doc LINUX的文檔資料(在更新的系統中,這個目錄移到/usr/share/doc)。
/usr/share 獨立與你計算機結構的數據,譬如,字典中的詞。
/usr/bin和/usr/sbin 類似與「/」根目錄下對應的目錄(/bin和/sbin),但不用於基本的啟動(譬如,在緊急維護中)。大多數命令在這個目錄下。
/usr/local 本地管理員安裝的應用程序(也可能每個應用程序有單獨的子目錄)。在「main」安裝後,這個目錄可能是空的。這個目錄下的內容在重安裝或升級操作系統後應該存在。
/usr/local/bin 可能是用戶安裝的小的應用程序,和一些在/usr/local目錄下大應用程序的符號連接。
/proc目錄的內容:
/proc/cpuinfo 關於處理器的信息,如類型、廠家、型號和性能等。
/proc/devices 當前運行內核所配置的所有設備清單。
/proc/dma 當前正在使用的DMA通道。/proc/filesystems 當前運行內核所配置的文件系統。
/proc/interrupts 正在使用的中斷,和曾經有多少個中斷。
/proc/ioports 當前正在使用的I/O埠。
舉例,使用下面的命令能讀出系統的CPU信息。
cat /proc/cpuinfo
/bin
bin是binary的縮寫。這個目錄沿襲了UNIX系統的結構,存放著使用者最經常使用的命令。例如cp、ls、cat,等等。
/boot
這里存放的是啟動Linux時使用的一些核心文件。
/dev
dev是device(設備)的縮寫。這個目錄下是所有Linux的外部設備,其功能類似DOS下的.sys和Win下的.vxd。在Linux中設備和文件是用同種方法訪問的。例如:/dev/hda代表第一個物理IDE硬碟。
/etc
這個目錄用來存放系統管理所需要的配置文件和子目錄。
/home
用戶的主目錄,比如說有個用戶叫wang,那他的主目錄就是/home/wang也可以用~wang表示。
/lib
這個目錄里存放著系統最基本的動態鏈接共享庫,其作用類似於Windows里的.dll文件。幾乎所有的應用程序都須要用到這些共享庫。
/lost+found
這個目錄平時是空的,當系統不正常關機後,這里就成了一些無家可歸的文件的避難所。對了,有點類似於DOS下的.chk文件。
/mnt
這個目錄是空的,系統提供這個目錄是讓用戶臨時掛載別的文件系統。
/proc
這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。也就是說,這個目錄的內容不在硬碟上而是在內存里。
/root
系統管理員(也叫超級用戶)的主目錄。作為系統的擁有者,總要有些特權啊!比如單獨擁有一個目錄。
/sbin
s就是Super User的意思,也就是說這里存放的是系統管理員使用的管理程序。
/tmp
這個目錄不用說,一定是用來存放一些臨時文件的地方了。
/usr
這是最龐大的目錄,我們要用到的應用程序和文件幾乎都存放在這個目錄下。其中包含以下子目錄;
/usr/X11R6
存放X-Window的目錄;
/usr/bin
存放著許多應用程序;
/usr/sbin
給超級用戶使用的一些管理程序就放在這里;
/usr/doc
這是Linux文檔的大本營;
/usr/include
Linux下開發和編譯應用程序需要的頭文件,在這里查找;
/usr/lib
存放一些常用的動態鏈接共享庫和靜態檔案庫;
/usr/local
這是提供給一般用戶的/usr目錄,在這里安裝軟體最適合;
/usr/man
man在Linux中是幫助的同義詞,這里就是幫助文檔的存放目錄;
/usr/src
Linux開放的源代碼就存在這個目錄,愛好者們別放過哦!
/var
這個目錄中存放著那些不斷在擴充著的東西,為了保持/usr的相對穩定,那些經常被修改的目錄可以放在這個目錄下,實際上許多系統管理員都是這樣乾的。順帶說一下系統的日誌文件就在/var/log目錄中。
總結來說:
· 用戶應該將文件存在/home/user_login_name目錄下(及其子目錄下)。
· 本地管理員大多數情況下將額外的軟體安裝在/usr/local目錄下並符號連接在/usr/local/bin下的主執行程序。
· 系統的所有設置在/etc目錄下。
· 不要修改根目錄(「/」)或/usr目錄下的任何內容,除非真的清楚要做什麼。這些目錄最好和LINUX發布時保持一致。
· 大多數工具和應用程序安裝在目錄:/bin, /usr/sbin, /sbin, /usr/x11/bin,/usr/local/bin。
· 所有的文件在單一的目錄樹下。沒有所謂的「驅動符」。
❾ linux 系統下proc與sys文件系統有什麼區別
sys是系統文件,是你真實操作每步用到的
/proc是虛擬的文件系統,不是實際儲存在磁碟上的,它包括被某些程序使用的系統文件
雖然2個都有系統文件,區別就是,一個是真實存在,裡面放東西的,一個是虛擬的~~滿意就給我分哈