新聞中心
linux中devm函數(shù)簡介

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了松滋免費建站歡迎大家使用!
隨著嵌入式系統(tǒng)的廣泛應(yīng)用,嵌入式系統(tǒng)的需求不斷增長。Linux作為一種廣泛應(yīng)用于嵌入式系統(tǒng)的操作系統(tǒng),其在嵌入式系統(tǒng)中的應(yīng)用也越來越廣泛。在Linux中,devm函數(shù)被廣泛應(yīng)用于嵌入式系統(tǒng)中。本文將為大家介紹Linux中devm函數(shù)的概念和應(yīng)用。
一、概述
在Linux驅(qū)動程序中,我們通常需要向內(nèi)核申請一些設(shè)備資源,例如:申請內(nèi)存、注冊字符設(shè)備等等。然而,當我們不再使用這些設(shè)備資源時,我們需要撤銷所使用的設(shè)備資源,以節(jié)省設(shè)備資源的使用。但是,當撤銷不當時,可能會導(dǎo)致設(shè)備無法正常工作,極大地影響嵌入式系統(tǒng)的穩(wěn)定性。在這種情況下,devm函數(shù)發(fā)揮了巨大的作用。
devm是Linux系統(tǒng)中的一個設(shè)備管理函數(shù),全稱為device managed(設(shè)備管理)。在Linux中,devm函數(shù)通常用來管理動態(tài)分配的資源,以便于設(shè)備的安全釋放。設(shè)備可以被看作是一個有限的、值得保護的資源,所以使用devm函數(shù)可以讓設(shè)備的管理和安全釋放變得更為簡單和安全。
二、devm函數(shù)的使用
1. devm函數(shù)的介紹
devm函數(shù)是一個宏定義函數(shù),其定義如下:
#define devm_xxx(p, f) \
({\
typeof(p) ___ptr = (p);\
___ptr ? (f) : NULL;\
})
其中,p為指向資源的指針,f是一種資源管理的函數(shù)。
2. devm函數(shù)的作用
devm函數(shù)是以“設(shè)備管理的方式”(device managed)為基礎(chǔ),在記憶資源分配時,將自動記錄相應(yīng)資源的釋放操作。在驅(qū)動程序中,當設(shè)備不再使用某個資源(例如:內(nèi)存或I/O端口)時,使用devm函數(shù)會自動調(diào)用相應(yīng)資源的釋放操作,從而防止資源泄露和內(nèi)存泄露的問題。
3. devm函數(shù)的應(yīng)用場景
在Linux設(shè)備驅(qū)動程序中,devm函數(shù)通常與i2c、spi、pinctrl等設(shè)備相關(guān)的API一起使用,以及和動態(tài)分配的內(nèi)存相關(guān)API一起使用。在以下場景中,常常使用devm函數(shù)來管理內(nèi)存和設(shè)備資源。
(1)pinctrl
pinctrl是Linux系統(tǒng)中一個非常重要的組件,在調(diào)度GPIO(General Purpose Input Output)接口時,pinctrl可以根據(jù)不同的設(shè)備類型進行有效的GPIO使用。這時就需要使用devm_pinctrl_get函數(shù)進行注冊。
(2)i2c
i2c是一種通訊總線,它通常應(yīng)用于系統(tǒng)中的各種外設(shè)。在Linux中,i2c設(shè)備的驅(qū)動通常使用devm_i2c_new_device函數(shù)進行注冊。
(3)spi
spi是一種高速串行傳輸協(xié)議,用于在嵌入式系統(tǒng)中的各種嵌入式設(shè)備之間進行通信。在Linux中,可以使用devm_spi_register_device函數(shù)進行注冊。
(4)網(wǎng)絡(luò)設(shè)備
在Linux系統(tǒng)中,網(wǎng)絡(luò)設(shè)備是一個非常重要的資源。在我們使用一個網(wǎng)絡(luò)設(shè)備之前,必須要開啟該設(shè)備,并管理該設(shè)備的各種資源。常常使用devm函數(shù)管理該設(shè)備的資源。
4. devm函數(shù)的示例
在開發(fā)時,經(jīng)常會使用動態(tài)內(nèi)存分配。在使用完之后,需要手動釋放內(nèi)存,否則可能存在內(nèi)存泄漏的問題。下面是一個實現(xiàn)應(yīng)用devm函數(shù)的數(shù)據(jù)結(jié)構(gòu)的示例,以便于釋放內(nèi)存等資源。
1. 聲明devm函數(shù)
static int my_new(struct platform_device *pdev)
{
struct my_platform_device *mydev;
devm_xxx(pdev, mydev) = devm_kzalloc(&pdev->dev, sizeof(*mydev), GFP_KERNEL);
if (!mydev)
return -ENOMEM;
memset(mydev, 0, sizeof(*mydev));
return 0;
}
2. 使用devm函數(shù)
static int my_probe(struct platform_device *pdev)
{
struct my_platform_device *mydev = dev_get_drvdata(&pdev->dev);
int ret = -ENOMEM;
/* allocate memory for mydev */
mydev = devm_kzalloc(&pdev->dev, sizeof(*mydev), GFP_KERNEL);
if (!mydev)
return -ENOMEM;
/* allocate memory for data */
mydev->data = devm_kzalloc(&pdev->dev, MY_DATA_SIZE, GFP_KERNEL);
if (!mydev->data)
goto err;
/* allocate memory for regulator */
mydev->regulator = devm_regulator_get(&pdev->dev, “my_regulator”);
if (IS_ERR(mydev->regulator)) {
ret = PTR_ERR(mydev->regulator);
goto err;
}
/* allocate memory for clk */
mydev->clk = devm_clk_get(&pdev->dev, “my_clk”);
if (IS_ERR(mydev->clk)) {
ret = PTR_ERR(mydev->clk);
goto err;
}
/* allocate memory for dma */
mydev->dma = devm_kzalloc(&pdev->dev, sizeof(struct dma_struct), GFP_KERNEL);
if (!mydev->dma)
goto err;
/* allocate memory for timer */
mydev->timer = devm_timer_request(&pdev->dev, my_timer);
if (IS_ERR(mydev->timer)) {
ret = PTR_ERR(mydev->timer);
goto err;
}
return 0;
err:
/* release resources */
return ret;
}
在上面的示例中,使用了devm_kzalloc分配了內(nèi)存空間,并且使用devm_regulator_get、devm_clk_get等函數(shù)分配了設(shè)備資源,當驅(qū)動需要撤銷這些設(shè)備資源時,devm函數(shù)會自動調(diào)用相應(yīng)的釋放操作,從而保證設(shè)備的安全釋放。
三、
了解了devm函數(shù)的概念和使用方法后,我們發(fā)現(xiàn),在Linux設(shè)備驅(qū)動程序中,使用devm函數(shù)管理設(shè)備資源是一個十分方便和安全的方法。它不僅可以避免一些常見的驅(qū)動程序錯誤,還可以在釋放內(nèi)存時加強內(nèi)存清理和釋放的穩(wěn)定性和可靠性。因此,在我們開發(fā)嵌入式系統(tǒng)時,建議使用devm函數(shù)來管理設(shè)備資源。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220APF文件怎么打開???
把Adobe Reader下載后安裝
APF: Advanced Policy Firewall,是 Rf-x Networks 出品的Linux環(huán)境下的軟件防火墻。APF采用Linux系統(tǒng)默認的 iptables 規(guī)則。APF可以算是Linux中最出名的軟件防火墻之一。
下載最新版的芹察空APF:
wget
解壓:
tar -xzvf apf-current.tar.gz
進入APF目錄:
cd apf-版本
安裝!
./install.sh
安裝完以后,開始配置APF:
nano /etc/apf/conf.apf
查找(ctrl + w) USE_DS=”0〃 ,將之更改為 USE_DS=”1〃 ;查找 USE_AD=”0〃 ,將之更改為 USE_AD=”1〃 。
然后開始配置最主要的部分:端口。
以下提供 cPanel, Ensim 和 Plesk 的推薦配置。
cPanel
IG_TCP_CPORTS=”20,21,22,25,26,53,80,110,143,443,465,993,995,2023,2023,2023,2023,2023,2023〃
IG_UDP_CPORTS=”21,53,873〃
EGF=”1〃
EG_TCP_CPORTS=”21,22,25,26,27,37,43,53,80,110,113,443,465,873,2023〃
EG_UDP_CPORTS=”20,21,37,53,873〃
Ensim
IG_TCP_CPORTS=”21,22,25,53,80,110,143,443,19638〃
IG_UDP_CPORTS=”53〃
EGF=”1〃
EG_TCP_CPORTS=”21,22,25,53,80,110,443〃
EG_UDP_CPORTS=”20,21,53〃
Plesk
IG_TCP_CPORTS=”20,21,22,25,53,80,110,143,443,465,993,995,8443〃
IG_UDP_CPORTS=”37,53,873〃
EGF=”1〃
EG_TCP_CPORTS=”20,21,22,25,53,37,43,80,113,443,465,873〃
EG_UDP_CPORTS=”53,873〃
下面列出常規(guī)的端口,方便大家進行配置:
21/tcp ftp
22/tcp ssh
25/tcp tp
26/tcp 備用tp端口
80/tcp http
110/tcp pop3
143/tcp imap
443/tcp https
993/tcp imaps
995/tcp pop3s
3306/tcp mysql
5432/tcp postgres
53/udp dns
配置完成后保存退出,并啟動APF防火墻:
/usr/local/in/apf -s
請注意,此時防火墻是運行在調(diào)試模式,每五分鐘重洗配置。這樣能避免因為錯誤的配置而使服務(wù)器癱瘓沒州。
確保配置無誤后,再次進入配置文件(nano /etc/apf/conf.apf),將 DEVM=”1〃 更改為 DEVM=”0〃 。這樣APF就會運行在常規(guī)模式下。
重啟APF(/usr/local/in/apf -s)。
注意事項:如果你的Linux內(nèi)核將iptables直接編譯而非模塊模式的話,請將配置文件中的 MONOKERN=”0〃 更改為 MONOKERN=”1〃 。
可選配置:
APF有個新的功能便是防止DoS攻擊(/etc/apf/ad)。其日志文件保存在/var/log/apfados_log。
下面我們將配置APF使其遇到DoS后發(fā)送電子郵件給管理員嫌瞎。
打開配置文件:
nano -w /etc/apf/ad/conf.antidos
查找 。
CONAME=”Your Company” 為你的網(wǎng)站或公司名稱。
將 USR_ALERT=”0〃 更改為 USR_ALERT=”0〃 ,從而使系統(tǒng)發(fā)送電子郵件。
USR=”” 為你的電子郵件地址。
保存并退出,重啟APF(/usr/local/in/apf -r)。
另外,如果需要讓系統(tǒng)每次重新啟動后自動運行APF,則執(zhí)行以下命令:
chkconfig –level 2345 apf on
需要去除自動啟動的話:
chkconfig –del apf
最后,希望大家都能順利的為自己的Linux架設(shè)起一道有效的安全屏障。
用姿胡方正閱讀器或者Adobereader這個軟件,就可渣塌以打開。
經(jīng)常有人問什么什么如冊圓擴展名的文件要用什么程序來打開,事實上,電腦上面真正能表示文件的類型并且得到一致承認的擴展名并不是很多,而大多數(shù)擴展名一般都是由使用該文件的軟件的開發(fā)者定義的。
APF格式文件可以用Adobereader這個軟件旁數(shù)
方正閱讀運租首器也型辯可以用相同的方法打開
linux中devm的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux中devm,_linux中devm函數(shù)簡介_,APF文件怎么打開?。康男畔e忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計算機網(wǎng)絡(luò)、設(shè)計、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
網(wǎng)站名稱:_linux中devm函數(shù)簡介_(linux中devm)
分享網(wǎng)址:http://m.fisionsoft.com.cn/article/dhcpedi.html


咨詢
建站咨詢
