Linux 意外操作後如何進行數據搶救

来源:http://www.cnblogs.com/itxdm/archive/2017/01/29/linuxdate_recover.html
-Advertisement-
Play Games

Linux 意外操作後如何進行數據搶救 在 GUI 中使用 組合鍵或是 CLI 下使用 刪除選項,這個文件並沒有從硬碟(或是其它存儲設備)上徹底銷毀。當它文件被刪除以後, 的數據指針部分被清零,僅僅是從系統的目錄結構中被移除,但是這個文件仍然存在你磁碟中的某個 物理位置上。( 或 查詢一個文件所對應 ...


Linux 意外操作後如何進行數據搶救

在 GUI 中使用  shift + delete  組合鍵或是 CLI 下使用 rm -rf 刪除選項,這個文件並沒有從硬碟(或是其它存儲設備)上徹底銷毀。當它文件被刪除以後,inode 的數據指針部分被清零,僅僅是從系統的目錄結構中被移除,但是這個文件仍然存在你磁碟中的某個 block 物理位置上。( ls -listat 查詢一個文件所對應的 inode 的元信息數據。 )。

註意:獨立硬碟冗餘陣列RAIDRedundant Array of Independent Disks)損壞或數據丟失,不在本次範圍。


Linux 系統管理員守則中有這麼一條:“慎用 rm -rf 命令,除非你知道此命令所帶來的後果“


一、實驗環境

1、工具

VMware® Workstation 12 Pro 12.5.2 build-4638234

CentOS-6.5-x86_64-bin-DVD1.iso

2、約定

1、所有操作全部在虛擬機環境下完成,使用CentOS操作系統。關閉SELinux!

2、故障模擬如下:

# df -hT
* 顯示當前系統配置情況,不同測試工具不同環境(每張圖可體現是一個嶄新的CentOS)
# openssl rand -base64 {num} -out {mount_path/filename}
  使用 openssl 數據工具生成 {num} 位隨機數。
# md5sum {mount_path/filename}
* 使用 md5sum 驗證工具列印 {mount_path/filename} MD5信息
# rm -rf {mount_path/filename}
  執行 rm -rf {mount_path/filename}
  
"#" 表示許可權 "root"、"*" 表示必須截圖體現,另特殊情況下也截圖。心情好也截圖 :)

3、測試情況下包括後續內容皆為 “配置好環境變數” 情況下。

0、不設置,可這麼執行
   {ProgramName}
   /usr/bin/{ProgramName}
   /usr/local/{ProgramName}/bin/{ProgramName} --help
1、設置別名,可永久生效
   alias {ProgramName}="usr/local/{ProgramName}/bin/{ProgramName}"
2、設置環境變數,臨時生效
   export PATH=$PATH:/usr/local/{ProgramName}/bin
3、設置程式軟鏈接,永久生效
   ln -s /usr/local/{ProgramName}/bin/{ProgramName}  /usr/bin/{ProgramName}

4、實驗記錄詳情:

1、數據恢復:
   單個文件(約定2已進行說明)
   文件夾/目錄(參見:https://github.com/erlinux/RecoverDateProject/tree/master/test)
2、更多包括:
   格式支持、界面支持、恢復時長、恢復效果。(詳情見文末表格)

5、模擬企業真實情況:

1、磁碟可卸除掛載
2、恢復程式編譯安裝

6、測試框架皆為:

1、通過文件系統的 inode 值(一般是 2 )來獲取文件系統信息。
2、通過上步驟所得出的結論使用 inode 編號以及 filename 進行恢復。
3、通過程式自帶的文件夾恢復 或 時間前後恢復 來恢復所刪除的數據。
4、通過上述三種步驟所展現的情況(包括其他測試)進行詳細的記錄用於對比。

3、備註

1、為幫助大家更好理解已進行中文譯化。

2、本人僅僅是一名學生,文章不當的地方還請指出。

3、最後祝各位新年快樂。雞年大吉大利、心想事成、身體健康。( 就當新年禮物吧 ^_^ )



二、恢復工具

在恢複數據前,要弄清楚倆個概念:inode(索引節點) 和 block (數據塊)

block 用於儲存數據,inode 用於存儲數據屬性信息。inode 為每個文件進行信息索引,所以就有了 inode 的數值。

graph LR;
file(讀寫索引) --> date(數據塊)
date --組合數據成為--> 標準文件;
移除文件--保存索引信息-->save(日誌)
save-->刪除索引指針;

extundelete

註意:即便不能實現重新只讀掛載當前數據盤,也絕對不能在需要恢覆文件的目錄下進行操作。

1 -> 安裝

# curl -O https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
# tar -jxvf extundelete-0.2.4.tar.bz2 && cd extundelete-0.2.4 
# ./configure --prefix=/usr/local/extundelete
-------------------
configure: error: C++ compiler cannot create executables
# yum install gcc gcc-c++ -y
configure: error: Can't find ext2fs library
# yum install e2fsprogs.x86_64 e2fsprogs-devel.x86_64 e2fsprogs-libs.x86_64  -y
-------------------
make && make install

2 --> 選項

extundelete --help
用法: extundelete [選項] [--] 設備-文件
選項:
  --version, -[vV]       列印版本並且正常退出.
  --help,                列印幫助並且正常退出.
  --[superblock](http://baike.baidu.com/view/1102790.htm)           
                         除了剩餘的內容之外,還列印超級塊的內容。
                         預設選項
  --journal              顯示日誌內容
  --after dtime          只處理在 'dtime' 後被刪除的條目
  --before dtime         只處理在 'dtime' 前被刪除的條目
功能:
  --inode ino            顯示 'ino' 的 索引節點 信息
  --block blk            顯示 'blk' 的    塊   信息
  --restore-inode ino[,ino,...]
                         恢復具有已知索引節點號 'ino',
                         已恢復的文件在當前目錄的RECOVERED_FILES文件夾里創建
                         而文件的索引節點號作為擴展(ie:file.12345)
  --restore-file 'path'  將恢覆文件 'path'. 'path' 是相對於根分區而言的,並且不以 '/' 開頭
                         已恢復的文件在當前目錄的 'RECOVERED_FILES/path'.
  --restore-files 'path' 列出將在 'path' 恢復的文件.
                         每個文件名格式應該與選項 --restore-file 相同,並且每行都應該有一個.
  --restore-directory 'path'
                         恢覆文件夾 'path'.
                         'path' 是相對於文件系統的根目錄而言的.
                         已恢復的文件夾輸出目錄在'path'。
  --restore-all          嘗試去恢復一切
  -j journal             從一個已命名的文件讀取外部日誌
  -b blocknumber         當打開系統文件時,使用一個塊數字備份超級快.
  -B blocksize           當打開系統文件,使用 blocksize 作為一個塊大小.
                         這個數字應該以 bytes 為單位.
  --log 0                程式靜默執行
  --log filename         記錄所有消息到文件.
  --log D1=0,D2=filename 自定義控制以逗號分隔的日誌消息
示例如下:                 列出選項. Dn 必須是 info,warn 或者 error 中一個。
   --log info,error      略去 ‘=name’ 信息中的結果
   --log warn=0          將指定的級別記錄到電腦控制台.如果變數為 '=0',指定的級別記錄將被關閉.
   --log error=filename  如果變數為'=filename',寫入具有該級別的消息到文件名.
   -o directory          保存恢復的文件到指定目錄.
                         預設情況下,恢復的文件被創建在 'RECOVERED_FILES' 文件夾.
extundelete /dev/sdb1 --inode 2
查找可恢復的數據信息,標記為Deleted狀態的是已經刪除的文件或目錄。

extundelete /dev/sdb1 --restore-inode 12,13
extundelete /dev/sdb1 --restore-file fstab
extundelete  /dev/sdb1 --after 1293877800  --restore-all
在當前目錄的 "RECOVERED_FILES" 下恢復恢復1293877800秒後的所有誤刪文件
Note: date -d "Jan 01 18:30 2011" +%s

3 --> 成功

① 模擬故障
2e4c997cdbdf81b9419297ec156960e0  /mnt/extundelete/extundelete.asdasfsafds-test

② 故障恢復
文件

目錄


ext3grep

1 -> 安裝

# wget --no-check-certificate https://github.com/erlinux/RecoverProject/raw/master/soft/ext3grep/ext3grep-0.10.2.zip
Note:please use wget to download file,curl download will be fail.it's hard to say 
# unzip ext3grep-0.10.2.zip && cd ext3grep-0.10.2
# ./configure --prefix=/usr/local/ext3grep
-------------------
configure: error: no acceptable C compiler found in $PATH
# yum -y install gcc
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
# yum -y install gcc-c++
configure: error: Missing headers. Please install the package e2fslibs-dev from e2fsprogs, or http://e2fsprogs.sourceforge.net for the upstream tar-ball.
# yum install -y epel-release && yum install ext2fs  blkid  e2p  uuid
-------------------
# make && make install

2 -->選項

Running ext3grep version 0.10.2
用法: /usr/local/ext3grep/bin/ext3grep [選項] [--] 設備-文件
選項:
  --version, -[vV]       列印版本並且正常退出.
  --help,                列印幫助並且正常退出.
  --superblock           除了剩餘的內容之外,還列印超級塊的內容。
                         預設選項
  --print                列印目錄塊inode號,如果有。
  --ls                   列印目錄每個條目只有一行。
                         這個選項通常需要打開過濾。
  --accept filen         允許 'filen' 作為合法文件名,可多次使用
                         如果改變任何 --accept 你必須刪除
                         BOTH stage* 文件!
  --accept-all           接受一切作為文件名
  --journal              顯示日誌內容
  --show-path-inodes     顯示路徑的每個目錄inode號。
過濾:
  --group grp            只處理組 'grp'。
  --directory            只處理目錄索引節點。
  --after dtime          僅'dtime' 或之後刪除的條目。
  --before dtime         僅'dtime' 或之前刪除的條目。
  --deleted              只顯示/處理已刪除條目。
  --allocated            只顯示/處理指定的 inodes/blocks.
  --unallocated          只顯示/處理重新分配的 inodes/blocks.
  --reallocated          不限制 inodes 重新分配的條目。
                         如果條目已刪除,inode 已分配,文件類型與 dir 條目和 inode 的不同時。Inodes                                  經仔細考慮會被 '重新分配' 
  --zeroed-inodes        不限制 zeroed 索引接點。
                         無論此選項,鏈接(links)條目都始終顯示。
  --depth depth          處理目錄遞歸的深度 'depth'
動作:
  --inode-to-block ino   列印塊,使得 inode 包含'ino'
  --inode ino            顯示 inode 信息 'ino'.
                         如果使用 --ls 並且 inode 是一個目錄,那麼過濾器應用於文件夾條目。
                         如果你不使用 --ls 那麼 --print 是預設的。
  --block blk            顯示塊信息 'blk'.
                         如果使用 --ls 並且塊是目錄的第一個塊,那麼過濾器應用於目錄條目
                         如果你不使用 --ls 那麼 --print 是預設的。
  --histogram=[atime|ctime|mtime|dtime|group]
                         根據給定的規格生成樹狀圖。
                         使用 atime,ctime,或者 mtime 將改變 --after and --before 意思
  --journal-block jblk   顯示日誌塊信息 'jblk'.
  --journal-transaction seq
                         用連續的數字'seq' 顯示處理信息
  --dump-names           將文件路徑寫入標準輸出
                         這意味著 --ls 但限制它的輸出。
  --search-start str     查找以固定字元串'str'開頭的塊
  --search str           查找包含固定字元串 "str" 的塊。
  --search-inode blk     查找Find inodes that refer to block 'blk'.
  --search-zeroed-inodes 返回分配為零的 inode 條目表。
  --inode-dirblock-table dir
                         為目錄路徑為 'dir' 找到 block 號和每個已使用的 inodes 節點列印一個表
  --show-journal-inodes ino
                         始終在日誌顯示 inode 'ino'副本
  --restore-inode ino[@seqnr][,ino[@seqnr],...]
                         恢復具有已知 inode 號的文件。
                         恢覆文件將被創建在./RESTORED_FILES/
                         而文件的索引節點號作為擴展(ie:file.12345)
                         除非 '@seqnr' 提供使用了序列號的日誌條目,不然的話使用最後一個條目。
                         在一個文件被重寫或被刪節這種情況下你可以使用這個,而不是刪除。
  --restore-file 'path' [--restore-file 'path' ...]
                         將恢覆文件 'path'. 'path' 是相對於根分區而言的,並且不以 '/' 開頭 (
                         它必須成為由 --dump-names 返回的路徑之一 ).
                         已恢復的目錄、文件、被創建在'RESTORED_FILES/path'.
  --restore-all          雖然還是 --restore-file 但是程式會嘗試去恢復一切.
                         推薦使用 --after 。因為嘗試恢復很舊的文件會導致他們被硬鏈接到最近刪除的文件
                         並且如此操作輸出量的可能性就越大。
  --show-hardlinks       顯示所有由倆個或多個共用的 inodes
ext3grep /dev/sdb1 --inode 2
查看 indoe 為 2 的目錄
ext3grep /dev/sdb1 --dump-names
列出 /dev/sdb1 下的所有文件
ext3grep /dev/sdb1 --restore-all
恢復 /dev/sdb1 下所有文件

3 -->成功

① 模擬故障
289f73b0b41489dfaa98f5eb094a382b  /mnt/ext3grep/ext3grep_ashndiasdnaind_test

② 故障恢復
文件

目錄

ext3grep 並沒有提供恢複目錄選項(也許我沒發現),但是可以曲線救國法使用before&after進行文件夾恢復
另外計算秒數的 date 命令可以這麼使用$(date -d "-1 hour" +%s)

其他

該工具僅能恢復 ext3 文件系統。


ext4magic

1 -> 安裝

# wget --no-check-certificate https://github.com/erlinux/RecoverProject/raw/master/soft/ext4magic/ext4magic-0.3.2.tar.gz
# tar -zxvf ext4magic-0.3.2.tar.gz && cd ext4magic-0.3.2
# ./configure --prefix=/usr/local/ext4magic/
---------------
configure: error: no acceptable C compiler found in $PATH
# yum install gcc -y
configure: error: You must install the develop packages "ext2fs , blkid , e2p , uuid" to build ext4magic
# 無法解決,改用 home_robi-1 倉庫安裝
----------------
yum --enablerepo=home_robi-1 install ext4magic  -y
WebSite:http://download.opensuse.org/repositories/home:/robi-1/CentOS_CentOS-6/

2 -->選項

  範例
              列印目錄的 Inode,這有一些可能性。

               # ext4magic /dev/sda3 -f /
               # ext4magic /dev/sda3 -I 2

              在第一示例中,輸出的是文件系統根目錄實際索引節點。
              在第二示例中,輸入路徑名稱也是根目錄。 即:Inode 2                                            


               # ext4magic /tmp/filesystem.iso -f / -T -x

              使用文件系統鏡像 "/tmp/filesystem.iso",
              搜索並且列印所有 Block 包括根 Inode,並且列印所有不同的 Inode。(包含數據塊的塊列表)
              如果是目錄,那麼還要為每個 Inode 列印目錄的內容。
              
              
               #  ext4magic /tmp/filesystem.iso -j /tmp/journal.backup -I 8195
              -t 182                                                          

              使用文件系統鏡像 "/tmp/filesystem.iso" 並且讀取從外部日誌 "/tmp/journal.backup" 
              從日誌處理 182 編號的 Inode 8195 編號。
     
     
               #  ext4magic /dev/sda3 -f user1/Documents -a $(date -d "-3 day"
              +%s) -b $(date -d "-2 day" +%s)                                 

              列印倆到三天前被刪除的路徑名 "user1/Documents" 的索引數據。 
              如果它是一個目錄,那麼(也列印)這個目錄的內容。
              如果在日誌找不到舊目錄 blocks,目錄內容將從文件系統真實內容。         



       簡單實例

               # ext4magic /dev/sda3 -r -f user1/picture/cim01234.jpg -d /tmp

              恢覆文件剛剛被刪除 "/home/user1/picture/cim01234.jpg" .
              文件系統已正常掛載 "/home".文件路徑規定從指定的文件系統根目錄並不是整個 Linux 根目錄
              不卸載文件系統是不可能的,文件將被寫在 "/tmp/user1/picture/cim01234.jpg"                     

               # ext4magic /dev/sda3 -r

              嘗試恢覆在24小時前刪除的所有文件,文件寫在"./RECOVERDIR/"內                                   



               # ext4magic /dev/sda3 -R -a $(date -d "-5day" +%s)

              嘗試恢復所有文件,即使如果他們有些已經被重寫,也能恢復所有沒有刪除的文件。
              刪除發生在四天前。                             



               # ext4magic /dev/sda3 -M -d /home/recover

              嘗試多階段的恢復所有文件在文件系統已經 "rm -rf *".
              文件寫入  "/home/recover".
              (on ext4: in this version skipped the last step.)              



               #  ext4magic  /dev/sda3 -RQ -f user1/Dokuments -a 1274210280 -b
              1274211280 -d /mnt/testrecover

              嘗試恢複目錄結構 "user1/Dokuments/". "-b" 時間戳,你必須設置刪除前的文件,
              "-a" 時間戳阻止找到舊的文件版本。這隻會更好的工作。
              如果你有創建或刪除文件在 "-b" 時間戳。(它會被)寫入目錄 "/mnt/testrecover"
              如果只有少數文件恢復,同時嘗試不用選項 -Q



               #  ext4magic  /home/filesystem.iso -Lx  -f user1 | grep "jpg" >
              ./tmpfile

               #  ext4magic   /home/filesystem.iso   -i   ./tmpfile   -r   -d
              /mnt/testrecover

              嘗試只恢復所有從目錄結構"user1/",刪除的文件在文件名具有 "jpg" (超過 24 小時)  
              並且寫入進 "/mnt/testrecover"  - 使用一個臨時文件 "./tmpfile" 用於文件名列表。


BUGS
       直接使用當前可讀寫的日誌打開文件系統會讀取產生壞塊。
       這個壞塊提供程式錯誤結果和不真實的結果。
       因此你應該永不使用這種文件系統,直接處於開放讀寫下的日誌
       如果有必要,使用掛載過的文件系統,創建文件系統日誌副本並且使用 -j 選項。


作者
       Roberto Maar
譯者
       jiwenkang

更多參見
       debugfs (8) , e2fsck (8)
-I             -> inode        索引節點,+數字
-f             -> path         目錄位置,+位置

ext4magic {sdx} -r/-R             ->        recover all (程度較低)
ext4magic {sdx} -M                ->        recover all (程度很強)
ext4magic {sdx} -rf {path/files}  ->        recover file
ext4magic {sdx} -d  {path}        ->        recover to diresotry

3 -->成功

① 模擬故障
c466f4672a18ee37ba5197e4d264d6ef  /mnt/ext4magic1/ext4magic1_111111
33dd6934d4a26c7fcb8a829c98fba1fb  /mnt/ext4magic2/ext4magic1_222222

② 故障恢復
文件

目錄

三、綜合展示

功能\名字 extundelete ext3grep ext4magic
分區支持 ext2
ext3
ext4
ext2
ext3
ext3
ext4
掃描時長 3s 3s 0s
恢復時長 2s 1s 1s
程式優勢 效果好操作簡單 支持的參數較多 前倆者的加強升級版
總體評價 ♥♥♥♥ ♥♥♥ ♥♥♥♥♥


註意,以下為失敗展示。僅供參考!

foremost

1 -> 安裝

# wget --no-check-certificate https://github.com/erlinux/RecoverProject/raw/master/soft/foremost/foremost-1.5.7.tar.gz
# tar -zxvf foremost-1.5.7.tar.gz  && cd foremost-1.5.7
# make
------------------
make: gcc:command not found
# yum -y install gcc
------------------
# make install

2 --> 選項

foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus.
$ foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t <type>] [-s <blocks>] [-k <size>] 
    [-b <size>] [-c <file>] [-o <dir>] [-i <file] 

-V  - 顯示版權信息並退出。
-t  - 列出文件類型 (-t jpeg,pdf ...) 
-d  - 間接打開塊檢測 (for UNIX file-systems) 
-i  - 指定輸入文件 (預設標準輸入) 
-a  - 寫入所有頭,不執行錯誤檢測 (已損壞的文件) 
-w  - 只寫入審計文件,不要將任何檢測到的文件寫入磁碟
-o  - 設置輸出目錄 (預設標準輸出)
-c  - 設置需要使用的配置文件 (預設 foremost.conf)
-q  - 開啟安靜模式.搜索在 512 位元組範圍執行。
-Q  - 開啟安靜模式.禁止內容輸出。
-v  - 詳細模式.屏幕顯示所有日誌信息。、
Foremost 支持恢復如下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip。

3 -->失敗


TestDisk

1 -> 安裝

# wget --no-check-certificate  https://raw.githubusercontent.com/erlinux/RecoverProject/master/soft/testdisk/testdisk-7.0.linux26-x86_64.tar.bz2
# tar -jxvf testdisk-7.0.linux26-x86_64 
# ./testdisk-7.0/testdisk_static

2 --> 選項

Use arrow keys to select, then press Enter key:
>[ Create ] Create a new log file
 [ Append ] Append information to log file
 [ No Log ] Don't record anything

使用箭頭鍵選擇,然後按Enter鍵:
>[ 創建 ] 創建一個新日誌文件
 [ 附加 ] 將信息附加到日誌文件
 [ 為空 ] 不使用日誌記錄任何內容
 
註意:必須正確檢測磁碟容量才能成功恢復。
如果上面列出的磁碟大小不正確,請檢查HD跳線設置,審查BIOS。以及安裝最新的操作系統補丁和磁碟驅動程式。
Please select the partition table type, press Enter when done.
>[Intel  ] Intel/PC partition
 [EFI GPT] EFI GPT partition map (Mac i386, some x86_64...)
 [Humax  ] Humax partition table
 [Mac    ] Apple partition map
 [None   ] Non partitioned media
 [Sun    ] Sun Solaris partition
 [XBox   ] XBox partition
 [Return ] Return to disk selection

請選擇分區表類型,完成後按Enter鍵。
>[英特爾  ] 英特爾/ PC分區
 [EFI GPT] EFI GPT 分區map (Mac i386, 某些 x86_64...)
 [Humax  ] Humax 分區表
 [Mac    ] Apple 分區map
 [None   ] Non 分區介質
 [Sun    ] Sun Solaris 分區
 [XBox   ] XBox 分區
 [返回   ] 回到磁碟選擇
 
提示:已檢測到Intel分區表類型。
註意:不要為只有單個分區的介質選擇“None”。 很少將磁碟設置為“未分區”。
>[ Analyse  ] Analyse current partition structure and search for lost partitions
 [ Advanced ] Filesystem Utils
 [ Geometry ] Change disk geometry
 [ Options  ] Modify options
 [ Quit     ] Return to disk selection

 [ 分析 ] 分析當前分區結構並搜索丟失的分區
 [ 高級 ] 文件系統實用程式
 [3D參數] 更改磁碟3D參數(Disk Geometry),即磁頭數(Heads),柱面數(Cylinders),扇區數(Sectors)
>[ 選項 ] 選項修改
 [ 退出 ] 回到磁碟選擇
 
 註意:恢覆成功需要正確的磁碟3D參數。如果它認為分區3D參數不匹配, 'Analyse'進程可能會給出一些警告.
 專家模式 : No
 分區對齊 : Yes
 數據轉儲 : No
 專家模式 : No 分區對齊 : Yes 數據轉儲 : No

3 -->失敗




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 驅動程式的調試一. 列印: printk, 自製proc文件UBOOT傳入console=ttySAC0(串口) console=tty1(LCD)1. 內核處理UBOOT傳入的參數console_setup add_preferred_console // 我想用名為"ttySAC0"的控制台,先 ...
  • 第一、安裝好Win10系統,不需要安裝其他激活工具。第二、是刪除預設序列號,打開命令提示符(管理員),運行 slmgr.vbs -upk,可提示已卸載了序列號。 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GXslmgr /skms kms.xspace.inslmg ...
  • 給自家的Ubuntu下載軟體速度有點慢,畢竟是從國外下載軟體,就想更換到國內比較好的更新源(就是這些軟體所在的伺服器),一般直接百度Ubuntu更新源就能出來一大堆,這時候最好是找和自己Ubuntu版本一致的更新源,我的Ubuntu版本是16.04,下麵是我找到的一個比較好的更新源 http://w ...
  • 1. 點燈法 可直接使用bl led_flicker來使用該程式。2. 串口列印及棧初步分析2.1 使用的前提是串口已經初始化完畢且可以正常使用 直接在需要定位錯誤的地方加上printk語句,看串口是否有相應的輸出即可。2.2 nand_setup的分析 a.棧和局部變數是臨時生成的 b.局部變數的 ...
  • 原本的字元設備只能有255個驅動程式,原因是一個主設備號占用了0~255的次設備號 把register_chrdev展開可得到一下幾個部分:register_chrdev_region/alloc_chrdev_region,cdev_init,cdev_add 參照register_chrdev的 ...
  • 1 分析i2c設備的識別過程i2c_add_driver i2c_register_driver driver->driver.bus = &i2c_bus_type; driver_register(&driver->driver); list_for_each_entry(adapter, &a ...
  • 1 確定相異性 1.1 選中網卡晶元nGCS4 1.2 確定相異性:基地址,中斷號,設置時序(記憶體控制器BWSCON,BANKCONn) 1.3 修改相應的部分 2 測試DM9000C驅動程式:2.1 把dm9dev9000c.c放到內核的drivers/net目錄下2.2 修改drivers/ne ...
  • 1 網路傳輸的簡介 (1)接收過程,如上圖,網路上的數據包到達網卡後,網卡產生中斷,然後設備驅動層收到中斷後,開始進行網路包的接收,接收完之後調用一個netif_rx函數交給網路協議層(層次結構上圖一),然後就是一層一層的網上傳到用戶空間了。 (2)發送過程,從用戶空間過來的數據包,經過層層穿越之後 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...