以下方式都是在command 模式,(按小寫i 就會切換到編輯模式,在按一次ESC會切到command模式)
1. 將游標移到字串上,直接按"*" ,可以直接做向下搜尋
2. 輸入"/", 接著輸入字串,可以向下搜尋此字串,接著按"n",可以向下搜尋,按"N",可以向上搜尋
3. 按下"?", 接著輸入字串,可以向上搜尋字串,接著按"n",可以向上搜尋,按"N",可以向下搜尋
4. 按下":",輸入"set num",可以列出整篇文字檔的"行號"
以下方式都是在command 模式,(按小寫i 就會切換到編輯模式,在按一次ESC會切到command模式)
1. 將游標移到字串上,直接按"*" ,可以直接做向下搜尋
2. 輸入"/", 接著輸入字串,可以向下搜尋此字串,接著按"n",可以向下搜尋,按"N",可以向上搜尋
3. 按下"?", 接著輸入字串,可以向上搜尋字串,接著按"n",可以向上搜尋,按"N",可以向下搜尋
4. 按下":",輸入"set num",可以列出整篇文字檔的"行號"
今天在開發platform的時候,準備要把編譯好的 NXP BT module 做insert的動作,卻出現了如下面所列的錯誤訊息:
insmod: ERROR: could not insert module hci_uart.ko: Unknown symbol in module
[ 79.719642] .(1)[5227:insmod]hci_uart: Unknown symbol hci_free_dev (err -2)
[ 79.719810] .(1)[5227:insmod]hci_uart: Unknown symbol hci_alloc_dev (err -2)
[ 79.719875] .(1)[5227:insmod]hci_uart: Unknown symbol hci_unregister_dev (err -2)
[ 79.719889] .(1)[5227:insmod]hci_uart: Unknown symbol hci_recv_frame (err -2)
[ 79.719927] .(1)[5227:insmod]hci_uart: Unknown symbol hci_register_dev (err -2)
以下我們將一步步來說明,如何找出這個問題的原因
1. 首先我們先到linux kernel driver底下,我們使用grep 來找一下,到底哪裡實作了 hci_free_dev()
# grep -rn hci_free_dev
結果找到的都是呼叫此function的地方,於是我們再往上一層路徑去尋找
假設我現在的Source code有git資訊,也就是可以用 "git status" 或是 "git diff" 等指令來查看目前狀態或是差異
假設我目前修改了檔案,路徑與檔名為
/home/danny/src/example/aaa.c
當前所在目錄為 /home/danny/ 底下
打一個patch(讓別人Merge你的修改)
於是我們可以很簡單的,使用下面的命令,先打一個patch檔案
git diff src/example/aaa.c > aaa.c.patch
於是就會多出一個檔案,位於 /home/danny/aaa.c.patch
aaa.c.patch大概內容會如下,可以看到差異:
--- a/src/example/aaa.c
+++ b/src/example/aaa.c
@@ -33,7 +33,11 @@
- printf("Hello\n");
+ printf("Hello World\n");
如何把patch檔Merge入自己的code
假設我現在是在 /home/andy/ 目錄下,先把 aaa.c.patch 複製到此目錄底下
接著確定此檔案確實存在 src/example/aaa.c
使用以下指令把patch檔打入
patch -p1 < aaa.c.patch
這樣就可以了!!