構建入口腳本
Ⅰ vue項目的標准結構
Vue項目創建完成後,使用WebStorm打開項目,項目目錄如下:
config中存放項目的一些基本配置信息,最常用的就是埠轉發
node_moles這個目錄存放的是項目的所有依賴,即npminstall命令下載下來的文件
src這個目錄下存放項目的源碼,即開發者寫的代碼放在這里
static用來存放靜態資源
index.html則是項目的首頁,入口頁,也是整個項目唯一的HTML頁面
package.json中定義了項目的所有依賴,包括開發時依賴和發布時依賴
對於開發者來說,以後99.99%的工作都是在src中完成的,src中的文件目錄如下:
assets目錄用來存放資產文件
components目錄用來存放組件(一些可復用,非獨立的頁面),當然開發者也可以在components中直接創建完整頁面。
推薦在components中存放組件,另外單獨新建一個page文件夾,專門用來放完整頁面。
router目錄中,存放了路由的js文件
App.vue是一個Vue組件,也是項目的第一個Vue組件
main.js相當於Java中的main方法,是整個項目的入口js
main.js內容如下:
在main.js中,首先導入Vue對象
導入App.vue,並且命名為App
導入router,注意,由於router目錄下路由默認文件名為index.js,因此可以省略
所有東西都導入成功後,創建一個Vue對象,設置要被Vue處理的節點是'#app','#app'指提前在index.html文件中定義的一個div
將router設置到vue對象中,這里是一個簡化的寫法,完整的寫法是router:router,如果key/value一模一樣,則可以簡寫。
聲明一個組件App,App這個組件在一開始已經導入到項目中了,但是直接導入的組件無法直接使用,必須要聲明。
template中定義了頁面模板,即將App組件中的內容渲染到'#app'這個div中。
因此,可以猜測,項目啟動成功後,看到的頁面效果定義在App.vue中
App.vue是一個vue組件,這個組件中包含三部分內容:1.頁面模板(template);2.頁面腳本(script);3.頁面樣式(style)
頁面模板中,定義了頁面的HTML元素,這里定義了兩個,一個是一張圖片,另一個則是一個router-view
頁面腳本主要用來實現當前頁面數據初始化、事件處理等等操作
頁面樣式就是針對template中HTML元素的頁面美化操作
需要額外解釋的是,router-view,這個指展示路由頁面的位置,可以簡單理解為一個佔位符,這個佔位符展示的內容將根據當前具體的URL地址來定。具體展示的內容,要參考路由表,即router/index.js文件,該文件如下:
這個文件中,首先導入了Vue對象、Router對象以及HelloWorld組件,
創建一個Router對象,並定義路由表
這里定義的路由表,path為/,對應的組件為HelloWorld,即瀏覽器地址為/時,在router-view位置顯示HelloWorld組件
Ⅱ 1.構建JS登錄腳本
在編寫xshell腳本的過程中用到最多的就是自動輸入,自動捕獲,延時等語句
自動輸入
以自動輸入xyz為例
自動輸入的語句:xsh.Screen.Send("xyz");
當然,如果你輸入的是一條命令,還需要下面這一行輸入回車
輸入回車的語句:xsh.Screen.Send(String.fromCharCode(13));
自動捕獲
以linux系統為例,一般程序執行的列印數據位於倒數第二行,如下圖所示
/* 字元串處理 */
var ScreenRow, ReadLine, Items;
/* 讀取倒數第二行,長度為40個字元 */
ScreenRow = xsh.Screen.CurrentRow - 1;
ReadLine = xsh.Screen.Get(ScreenRow, 1, ScreenRow, 40);
延時
以等待1s為例
延時語句:xsh.Session.Sleep(1000);
其他
打開新會話:xsh.Session.Open(string);
對話框提醒:xsh.Dialog.MsgBox(string);
設置日誌路徑:xsh.Session.LogFilePath = string;
開始記錄日誌:xsh.Session.StartLog();
清屏函數:xsh.Screen.Clear();
等待輸入:xsh.Screen.WaitForString(string);
示例
本文以一個自動測試腳本為例,定時向/tmp/test文件寫入數據,然後回讀列印,截獲回讀列印的值進行分析
/* 測試函數 /
function test()
{
/ 發送echo 112233 > /tmp/testfile */
xsh.Screen.Send("echo 112233 > /tmp/testfile");
xsh.Screen.Send(String.fromCharCode(13));
}
/* 主函數 /
function Main()
{
/ 打開會話,根據實際的會話路徑修改 */
xsh.Session.Open("C: Computer6XshellSessionsubuntu.xsh");
xsh.Screen.Synchronous = true;
// xsh.Screen.WaitForString("start");
// xsh.Screen.Clear();
}
運行腳本的操作:
在編寫xshell腳本的過程中用到最多的就是自動輸入,自動捕獲,延時等語句
自動輸入
以自動輸入xyz為例
自動輸入的語句:xsh.Screen.Send("xyz");
當然,如果你輸入的是一條命令,還需要下面這一行輸入回車
輸入回車的語句:xsh.Screen.Send(String.fromCharCode(13));
自動捕獲
以linux系統為例,一般程序執行的列印數據位於倒數第二行,如下圖所示
/* 字元串處理 */
var ScreenRow, ReadLine, Items;
/* 讀取倒數第二行,長度為40個字元 */
ScreenRow = xsh.Screen.CurrentRow - 1;
ReadLine = xsh.Screen.Get(ScreenRow, 1, ScreenRow, 40);
延時
以等待1s為例
延時語句:xsh.Session.Sleep(1000);
其他
打開新會話:xsh.Session.Open(string);
對話框提醒:xsh.Dialog.MsgBox(string);
設置日誌路徑:xsh.Session.LogFilePath = string;
開始記錄日誌:xsh.Session.StartLog();
清屏函數:xsh.Screen.Clear();
等待輸入:xsh.Screen.WaitForString(string);
示例
本文以一個自動測試腳本為例,定時向/tmp/test文件寫入數據,然後回讀列印,截獲回讀列印的值進行分析
/* 測試函數 /
function test()
{
/ 發送echo 112233 > /tmp/testfile */
xsh.Screen.Send("echo 112233 > /tmp/testfile");
xsh.Screen.Send(String.fromCharCode(13));
}
/* 主函數 /
function Main()
{
/ 打開會話,根據實際的會話路徑修改 */
xsh.Session.Open("C: Computer6XshellSessionsubuntu.xsh");
xsh.Screen.Synchronous = true;
// xsh.Screen.WaitForString("start");
// xsh.Screen.Clear();
}
運行腳本的操作:
實際執行結果如下:
Ⅲ Linux內核程序入口地址
在Linux內核中,使用 vmlinux.lds.S 文件(路徑: arch/arm64/kernel/ )布局內核映像中相關段(例: .text、.data )的位置。
在Linux內核編譯時, vmlinux.lds.S 文件最終會被構建成鏈接腳本 vmlinux.lds 文件(路徑: arch/arm64/kernel/ )。
本文主要介紹Linux內核程序運行的起始位置 _text ,在 vmlinux.lds.S 文件中定義如下:
從上面可以看出: _text = KIMAGE_VADDR + TEXT_OFFSET 。
1、KIMAGE_VADDR定義
文件: arch/arm64/include/asm/memory.h ,定義如下:
文件: include/linux/sizes.h ,定義如下:
宏 KIMAGE_VADDR 展開如下:
上面是按照無符號計算, KIMAGE_VADDR 為: 0xFFFFFF8008000000 。
2、TEXT_OFFSET定義
文件: arch/arm64/Makefile ,定義如下:
通過計算, _text 值為: 0xFFFFFF8008080000 。
在Linux內核啟動時,從 log 信息中也可以找到對應的地址:
_text 對應的是虛擬地址 , 在內核中可以直接通過訪問該地址獲取其保存的值 ,其對應 Image 映像中的第一個字 0x14424000 。
Image 映像查看方法如下:
本文基於 RockPI 4A 單板Linux 4.4內核。