/dev/random和/dev/urandom是linux上的隨機(jī)數(shù)生成器,是個字符設(shè)備,為系統(tǒng)提供隨機(jī)數(shù)。隨機(jī)數(shù)主要應(yīng)用在加密方面,沒有加密的操作都是可預(yù)測且不安全的。
linux上隨機(jī)數(shù)的生成原理
linux上隨機(jī)數(shù)的生成原理是將系統(tǒng)的中斷信息收集起來放入熵池中,通過算法生成更多無序的數(shù)據(jù),有了大量的無序數(shù)據(jù)之后,每次獲取隨機(jī)數(shù),就會從池子中讀取指定的字節(jié)序列,而這些字節(jié)序列就是生成器生成的隨機(jī)數(shù)。
linux開機(jī)時就會伴隨著random設(shè)備的初始化,一般我們經(jīng)常會遇見這兩條log:
random: crng init done,
random: 7 urandom warning(s) missed due to ratelimiting,
這說明隨機(jī)數(shù)已經(jīng)初始化完成,可以隨時請求使用。但是在某些時候會卡在這個log很長時間,這是因為在開機(jī)時系統(tǒng)中斷不夠或程序運(yùn)行時熵不足,生成隨機(jī)數(shù)非常緩慢,導(dǎo)致阻塞,進(jìn)而導(dǎo)致無法開機(jī)、app無法正常運(yùn)行等一系列bug。
為了解決這個問題,我們可以移植一個工具對熵池進(jìn)行補(bǔ)熵,這樣隨機(jī)數(shù)生成器就會快速生成隨機(jī)數(shù),解決阻塞導(dǎo)致的一系列問題。
解決方案
解決這個問題的工具有很多,這里我們選用移植haveged工具,并使用啟揚(yáng)IAC-IMX8MM-kit開發(fā)板展示具體操作過程。
移植haveged-1.9.3
首先source我們的sdk開發(fā)環(huán)境,然后進(jìn)入到源碼內(nèi),通過configure配置makfile文件,命令如下:
./configure --host=aarch64-poky-linux --prefix=/home/ylook/haveged
配置完成后執(zhí)行make && make install命令,會在/home/ylook/haveged目錄下生成編譯完成后的二進(jìn)制文件以及相關(guān)庫文件,如下圖所示:
(注:筆者路徑有所不同,根據(jù)環(huán)境自行更改即可)
注意:
為防止錯誤,可以使用file命令檢查二進(jìn)制文件架構(gòu),保證為aarch64架構(gòu)即可。
將編譯出來的二進(jìn)制文件拷貝到板子的/usr/bin/目錄,庫文件拷貝到/usr/lib/目錄,執(zhí)行haveged --h命令,如下圖所示:
這里就相當(dāng)于我們已經(jīng)把板子里的環(huán)境配置好了,為了能夠開機(jī)就使用該工具生成熵,所以我們需要在開機(jī)進(jìn)程中將該工具設(shè)置為自動運(yùn)行。
因為啟揚(yáng)i.MX8M Mini開發(fā)板上使用systemed工具配置相關(guān)服務(wù),所以我們需要寫一個service,然后讓它開機(jī)運(yùn)行,具體service如下:
使用systemctl enable haveged之后重啟就會生效,可從開機(jī)log中看出,如圖所示,在很早之前初始化就已經(jīng)完成了。
也可以使用命令cat /proc/sys/kernel/random/entropy_avail,查看當(dāng)前熵值,在沒有haveged之前該值只有幾十幾百,而開啟之后有幾千。
這樣,就完美解決了隨機(jī)數(shù)生成過慢導(dǎo)致系統(tǒng)阻塞的問題。
-
生成器
+關(guān)注
關(guān)注
7文章
317瀏覽量
21061
發(fā)布評論請先 登錄
相關(guān)推薦
評論