❶ 通過ioctl 可以獲取網卡的網關地址嗎
1.ifconfig -a 其中 HWaddr欄位就是mac地址
2. cat /sys/class/net/eth0/address 查看eth0的mac地址
3. cat /proc/net/arp 查看連接到本機的遠端ip的mac地址
4. 程序中使用SIOCGIFHWADDR的ioctl命令獲取mac地址
注意:要和ifcfg-eth0中device和mac地址的eth0對應,mac地址也要對應
❷ ioctl 自定義命令 是否必須載入模塊
第一種方法需要修改內核,適用面比較窄;第二種方法hack意味很濃,沒有被使用的系統調用號有限,不同模塊可能都使用這種機制,可能會產生沖突。最終我們選擇了第三種方法。下面將一一道來。
ioctl系統調用是用戶態控制設備的介面,其用戶態原型為
int ioctl(int d, int request, ...)
第一個參數是打開的設備文件的文件描述符,通常是open系統調用的返回值;第二個參數request是可以自定義的請求號;第三個參數可以是一個指針,指向一段用戶態內存,用來傳遞參數,也可以是一個整形數據。函數原型中的'...'並非表示ioctl是可變參數函數,只是為了告訴編譯器不要檢查第三個參數。
在較新內核中,ioctl的內核態原型為unlock_ioctl
❸ 在linux系統中,分區與格式化硬碟的命令是什麼
Linux下常用的分區工具:
fdisk/sfdisk:命令行工具,各種版本和環境都能使用,包含在軟體包util-linux中
diskdruid:圖形化分區工具,只能在安裝REDHAT系統時使用。
第一步:fdisk
[root@novice ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
[root@novice ~]# fdisk /dev/sdb
Command (m for help): #在輸入上面的命令後會出現左邊的提示,輸入m就會得到一個幫助菜單,如下:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
#help雖然是英文的,可都很簡單,在這里不再解釋。
#現在,我們正式開始分區的操作:
Command (m for help): n #新建分區
Command action
e extended
p primary partition (1-4)
#e/p分別對應擴展分區 /主分區;我們先分四個主分區,每個50M;然後再來增加主分區或擴展分區,看會出現怎樣的狀況,嘿嘿。
p #分區類型為主分區
Partition number (1-4, default 1): 1 #分區號,在這里我們依次選擇1、2、3、4
First sector (2048-496127, default 2048): #指定分區的起始扇區,一般默認,按enter鍵即可。
Last sector, +sectors or +size{K,M,G} (2048-496127, default 496127): +50M #指定分區的終止扇區,根據前面的提示我們可以做出相應的選擇+sectors 或 +size{K,M,G}
Command (m for help): p #用p列印出已建好的分區列表
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
#剩下的三個分區的建立操作同上
#分好四個主分區後的情況如下
Command (m for help): p
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 309298 25+ 83 Linux
#已經建好四個主分區啦,現在我們來看看如果再建主分區或是擴展分區的話會出現怎樣的情況:
Command (m for help): n
You must delete some partition and add an extended partition first
#看到了吧,不能再建分區啦!要再建分區的話必須刪除some分區,再新建一個擴展分區才行。
#現在,我們刪掉一個主分區,來新建擴展分區
Command (m for help): d #刪除分區
Partition number (1-4): 4 #選擇要刪除分區的分區號,我們選第四個
Command (m for help): p #列印,如下,四個分區變成了三個!
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
#新建一個擴展分區
#如果在沒有建滿三個主分的區的情況下建立擴展分區,相關選項會有些不同。
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Selected partition 4
First sector (309248-496127, default 309248): #enter,默認
Using default value 309248
Last sector, +sectors or +size{K,M,G} (309248-496127, default 496127): #enter,默認,使用剩餘空間
Using default value 496127
Command (m for help): p
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 496127 93440 5 Extended
#接下來,我們在新建的擴展分區里再新建兩個邏輯分區,因為已經有了三個主分區,這里不會再顯示是建立邏輯分區還是主分區的提示!
Command (m for help): n
First sector (311296-496127, default 311296): #enter
Using default value 311296
Last sector, +sectors or +size{K,M,G} (311296-496127, default 496127): +50M
Command (m for help): n
First sector (415744-496127, default 415744): #enter
Using default value 415744
Last sector, +sectors or +size{K,M,G} (415744-496127, default 496127): #enter
Using default value 496127
Command (m for help): p
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 496127 93440 5 Extended
/dev/sdb5 311296 413695 51200 83 Linux
/dev/sdb6 415744 496127 40192 83 Linux
#上面的列表,就是我們今天分區的成果啦!接下來保存退出,重啟計算機,就可以進行下一步的mkfs操作啦!如果忘記了相關的操作命令,記得按m!!!
Command (m for help): w #保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
另:在建好分區後,我們還可以更改相關分區的文件系統類型
#如,我們要把第二個主分區改成Linux下的交換分區,操作如下
Command (m for help): t #更改文件系統類型
Partition number (1-6): 2 #選擇第二個分區
Hex code (type L to list codes): L #選擇要更改的文件系統編碼,可以按L來查看相關編碼信息。
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
............
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Hex code (type L to list codes): 82 #查找到linux swap的編碼為82
Changed system type of partition 2 to 82 (Linux swap / Solaris)
Command (m for help): p
..............
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 82 Linux swap / Solaris
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 496127 93440 5 Extended
/dev/sdb5 311296 413695 51200 83 Linux
/dev/sdb6 415744 496127 40192 83 Linux
#最後別忘了保存!如果你須要的話!
#擴展分區不能直接使用,邏輯分區只能建立在擴展分區上!
第二步:mkfs(mkfs時分區的格式最好與fdisk設定的分區格式一致,不然.......)
mkfs支持ext2 ext3 vfa msdos jfs reiserfs等文件系統。
用法1:mkfs -t
例: mkfs -t ext3 /dev/sdb2
用法2:mkfs.
例:mkfs,vfat /dev/sdb3
mke2fs支持ext2/ext3文件系統
用法:mke2fs [-j]
例:mke2fs -j /dev/sdb5
# 更多更具體的用法請參照相關命令的man手冊
下面,接著實驗:
例一
[root@novice ~]# mkfs -t ext3 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
12824 inodes, 51200 blocks
2560 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=52428800
7 block groups
8192 blocks per group, 8192 fragments per group
1832 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
第三部:掛載
掛載:mount
例:mount /dev/sdb1 /mnt /sdb1
卸載:umonut
例:umount /dev/sdb1
❹ linux系統中的ioctl函數的CMD的幻數定義在哪裡定義是驅動程序中還是應用程序中
COMMAND命令字可以自己定義,也可以用不同驅動已定義的命令字。CMD命令字的用處打個比方,用戶層想使用內核層某驅動的一個功能,那麼它就可以通過IOCTL傳相應的命令字下去,給內核,內核通過接受到的命令字,實現相應功能。
❺ kuka機器人 IOCTL是什麼指令
KUKA機器人編程指令
F標識器給一個信號後就常有,直到下一個F值出現取消。
M狀態寄存器有信號時有,取消就消失。
T記時器的標識器,有信號時有,取消就消失。
❻ ioctl()函數的參數和作用
因為用戶層定義它是個變參函數
ioctl (int __fd, unsigned long int __request, ...)
跟printf似的
❼ ioctl(fd,I2C_SLAVE_FORCE,0x49);這段代碼的意思
這是io口驅動介面,第一個fd表示某個io口描述符, 第二個是一個命令, 第三個是所帶參數
命令是程序定義的,所以我這里看不出東西,但主要是讀和寫命令,根據最後一個參數,這個很大可能是寫命令。
所以這端代碼意思是:向某個io口設入一個命令。
❽ ioctl 函數調用不成功: main函數中無論是ioctl(fd,'k',2); ioctl(fd,1,2);都不行,為什麼呀,求指教。
ioctl函數的頭文件寫了嗎?
#include <sys/ioctl.h>
bdkyr《開源人》 留言
❾ 如何在命令行發送ioctl命令給字元設備
找到a的ioctl函數名字,聲明一下,直接可用。如果在模塊中調用,EXPORT_SYMBOL一下。
❿ ioctl函數有什麼作用
ioctl是設備驅動程序中對設備的I/O通道進行管理的函數。所謂對I/O通道進行管理,就是對設備的一些特性進行控制,例如串口的傳輸波特率、馬達的轉速等等。它的參數個數如下:int ioctl(int fd, int cmd, …);其中fd就是用戶程序打開設備時使用open函數返回的文件標示符,cmd就是用戶程序對設備的控制命令,至於後面的省略號,那是一些補充參數,一般最多一個,有或沒有是和cmd的意義相關的。ioctl函數是文件結構中的一個屬性分量,就是說如果你的驅動程序提供了對ioctl的支持,用戶就能在用戶程序中使用ioctl函數控制設備的I/O通道。