版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、我们可以从LED程序中榨取很多知识:基本的驱动框架、驱动的简单分层、 驱动的分层+分离思想、总线设备驱动模型、设备树等。这大多都是结合韦老师 的教程学的。这篇笔记结合LEDdem(基于设备树)来学习、分析:名称窗日朗|.1 OlJed.drvjtemiplateL 02 led drv for bo a rd 5 血cw 口星雜立好1OSjed.d rvjernp 1 are_s eperate2C20Z4/17 議一“文4互i.i 04 led dry tErnp怙:e bu5 dev drv2C20/4/17W.文4叢t. 04 led drv temiplate bus dev drv
2、unfiriished2020/4/181,.i,05Jed tJrv tenp 1 a:e devicejtree15050/4/171.文特F面是LED程序的几个层次结构图:基本的led驱动 简单分层的LED程序 分层斗分离资源与操作分离)的LED程序drv tcsl c開户空偲IlM炖rvn.廿匚*3;用直勺二L:-:丄匸訣|bT-pP ! A d 匚躍ft辰之 I chiip opio clad ramuroe 的gptcAff* tMwtl B lod c I 基于总线设备驱动模型的LED程序f5t/l?ISlcdl_drvjsl.c屈户空祐磴件层2 1 chip gpio cn v
3、i: rpHattormi devicebaerd_B_l(Lc虹Z点碍社和土WE运出:ied r?sc-.irc3?(加脾的cpi匚茁 迫界jburd A,乏 d_应用层修d div teste: r r制科一誦可弋用井阳户空间靈动屛led drv.c冉播空间 基于设备树的led程序pldtformi driverIJftE .! ebip_gpie.c:;Id-J f|i d内扶解析设备W节点信息蛤到 pTatform device注意:层与层之间的箭头指向是相对的,从哪指向哪看你怎么理解。比如 有两个函数:函数A和函数B,我们可以说函数 A调用函数B,也可以说函数B 被函数A调用。本篇基
4、于第个图来分析。我们先来体验一下使用设备树描述引脚信息的方式来点灯。修改内核目录Li nux-4.9.88/arch/arm/boot/dts下的 100ask_imx6ull-14x14.dts设备树文件。把出厂带的设备树文件的led相关节点给屏蔽掉,然后添加如下节点信息 至根节点:#defi ne GROU P_PIN(g, p) (g16) | (p)100ask_led0 com patible = 100as,leddrv;pin = ;修改后的设备树文件内容如:In-nnh-flibnuom-JC wrrr- Fcdli Lutnei Setfari Mscrci 址卡:;1 ti
5、wflSffvn Toncap eg sesn劃驢Y m丄W Lpr tewr Ttfndnf Pvdoantionc.tM*nc4s5r_itllMWJWf-* SIlinfXJUrmMf Ha-ESir画Le -nAi,JJ&jikW l*11xtt. cmffLK书疋册Ki.LXJDDaKjiw和1:收:UtHLS-lODwjmkir llyHjdt. dt.flK.nc5Z-rrt dtfaend1r业ctb,乩d匕 御L2.rK5C-ErptLHfa3ts.bT|d.E対 cdhnliTKU-VGA:! drCTV1JTCf hfi讚xMp心me1K.尸(亦出:*曲71XLr.rfl
6、dak ftriQ He Fp1K.mcSSiiSjjt. Jtbdir. np1rJttSMl 庄A 血 E更2.-nclMtaildE:iijTKkJMtU.A.dA.mDLX1IiTVU也fide虹血asjncEV tftti.rreJ1K .mS-Hpfc ttfa,4 dt-tirp1r.n(5iH)i tftbJ.pfe tw4-i卜IB R+rrp T.onqmn/ Follow tsrmral klder Vi %t1;1r*liregjlat 口-fiarie = 戸讨 1叶=; rejUTorjrin mrr&rdt - . .百 h -fl; : CH* iinrl ii
7、ri*/r-.nTinA*rAl; ridin JJ CTH Lii|i-/L(jnrf iq/ : who J. 9 M* 匕 biu/bh / m pti ptloc rI rqion J intLi?Je/config/si/taz includ日corf 二*/tewl el wsB,七耳p; if -r incLiJe/conf iq;kemet, relema c叩 -s innu44i/crififlAArTin int7 udt/fonf iq/tfnel release; fllake -1 . /acf 1 pts/HakfilE.asn-gtTierit tri: = A
8、fi obi=Arcrvarn/incLud;nnt*d/an禅k* 4 JMUptiirk*和片5rc.=ui/35n Db=erinctudp/ggfierst9dyQ5p:/a泗.tH礼incluw/gflnrsTpd/VJpi/linar/Tef Siom-li ; BdirIrttluH/gmfiratfld/HWpi/Linu ;i (ecMLlUU_ UFpTnn fF M吕E祐;啊M ScM:时 矿稠1 _;T晦乙】(U) - * llh) * fl * ( iwl%旳胡兀 flpi/lir jx/versiMi.h. tap- if | - r include/qnraEd/
9、Liapi/l hnui/re-rs ban. h M tap - irM ludB/errated/uafn/liNuK/irsian .h ir clud*/cePreratedudpi/LinLK/*r5ioirh_lrKi; Thwl n - f _rtLude;nenerated/bapi/L3.nuK/vr3i6nrt. trrp;1 uPa i*Klude/genrftttc/ufipi/Un.ux/vii*iiofi.h; nv -f inclu;r*ttdyutp/1riion.h.tup includ+/gtntr4t*d/jifii/l.-nuK/vtrt:.cn,hL
10、fi ra f iriclud/l iriUM/VS IDFih&et 0; : CHhinclude/gnFrstl/ut5rel.M5 0,h ; jrdir p incbide/erated/;if t echo -n *4.9,8K I 屯 c -gt64 Jihm c 弋 h 4.yb4 ck-arK ler*車破;cMit 1: f i : (nhD +def int IJTS_Hf-9.06屮昇 imlkkdtFtoof i 新山rneL. rledri iniTudF/qmpratm山.t即;if - r i补匸 1胡舍/斗知Efat芒d/uT呂 *芒1壬2弓吉,h U ip
11、亏 irw. 1 ude/gp-rarM/ut Lt3i*.h ifxLLjd*/9eneratec:/utsreli5e.h*trip; then - F in匚Lijde/er- rdled/Utsreltast .h. tip: else :d/uti.h: iTv 十 iftcl-jdfrtUjjfrh.wp 丄忧3川钊fiTicdi r -p . tnip_tflrRTfln- f ./scripts/P*akfile.bkjid d?r ripl5/ba?itm . f _1咿_牡“1_;wke -f ./4p 1 叭117 迖.叭、i 3 严 j /::改I *r嘖Liid/ge
12、rtf ratd/gn曲.h. tflp; if r jntludfr/jentratfrd/bflLjndi .h U jnd5 h_tip: di巧 m -t 1.-cludege-eraled/b:uncK.xh_tip: L&e ; iJPDZbQucdi.h.Tnp irlud*/g*f*tfd/b:uwi.i iiCH* iinrlP-et然后把设备树文件与可加载的led驱动模块、reLiPDinclude/generate_._W J 2 f r-p:):肚愉ethd) ieg -5 jncludif/ijfrrifrrflted./bOfcrtti .h inciLtde/qf
13、rritrated/hft include- ge-rjTedi/tisundB _hrrv -t incLude/-rat&cled应用程序上传到板子里:jrattKjiCL9 fFitK 驗阿 EMMCRtt LJlwtrt砂ItTMSCP:011552血:33呼:jftess鬲圖owl卿:iKecL0】血2叶咖EIXkLL0il&:2UicxeoS护(KeSLL0i90M126see:SXTDLPOaf:liK01 If: 90述1囂3DP:Oilf-r?DkO】加s卿;SPt0)倔5忖xWQO,如饨曲SDP;5Pt:OiO&15.DsblaljOjOGoa. 0if5?a 那SWU;f
14、PLCttO 肚 5J由舸;【0洽加aFEE:QiC 師 fg血哂:OrOfiffDitaff*E;CtOE:bObilSdLcitf5doefor KritlKnTSEApp+ar八亠aWrt lLi2iuJf_nrfdlhHTffdiilies r:3 Derice2:12lart nd:PBL-t feOODOj: ucsd eitlnilfr aac tJ $北二file) IlfiJlSoot-hFleJ; 2:此讪讥F 由J2: 12P1 art Ciid:PB: Cm2:堆Wb)+2hAttached at 2:1Eizution crpiftcd, PlfQEC let ts
15、1W? rr:de 9ii= rfitart thr trnrd奔輩祁j斓塞鮒妣MH厲插爭9!换轄详 Mini笑豪 割Ids运利輒剧匕 礎?牺ITCapFit Q TOZOSWlg上传成功的文件如下:塵 COW In,竹氐 h IE* fPNaaHIn IIART By:松(昴 全TtingT Mm计 畑pB Y S 山 仙 rUBEHC Limrv PaAhc*! berrngiTrfpiinlX rvcr *吕 CiflEfi.$?; t 忸 .區jMhvierweriTifexactsjeacfwr*丄rwxr MrdrwK_r-xr-jtdr.Kr-xr-x rwxr- xr- MI
16、rKrAwwr-KTlEKEfKEH dr KP KF X 1 iwrw盯I山訝kF ide耳厂 dryxr dr-tr-j(r-jt rk曰K drwTr dzr H护F dr- xr drwxrwxFwT 右甬FJcLH ldryxr-;r-xxr X 罩厂-罩 Er-E?tr-甚rootrootrod rMt 厂口小 riwlSi rcKit rw?t r fjOt rodtrixjt r ul roo1 roolrool rrwt rm?t r root rcKit r LK3t rgT r&olroot Nt t r*Jt root rent root rootroot st r*D
17、t r*ftt root r WL Ft r-ODt rant rttt rQfft sru ro-D-t rftftt r 岳 it rzt root37495 Jan 40彌如 g)百 idti72Ba JanJlbC Jan他右JW1 旳聊Jan Q阴b Jar邓&晶Jm 臨Jona JarUQfi 】4tl n Jm16 3 & 4 J Ml 4A肺 阳?尊 单jytJjfl Jin Jan J Ml Ian JarIJ 肩 15运行测试:zee 490 J 沖 AdQb Jni a Jan5DC J Ml i3Qfi 列 4oyt Jan13M汕e “IM 活B-on:jj ?_sn
18、:寻厂二n血WL3U10d 曲5D:0D ?-&D二叫广*50 ;D 划 轴曲(&fl;ot轴誨1 M:m moiizo z嘟2C2DOD:007耐尊旅朝 90苗1 眄mM曲1 an: ad DD:oaJth1汀XibS/ 4 1 lb:LAr咋迥;lGuirc 亠才 ii广匕丫 L t+JwidII* j丄 Jiir:B-(p峪川I山时匸书匸gj .,._uifFijrT*in;芻:Uifii chui_dswi,n-卡e前衍币 hvcs * t4*wri He* r MlI .7胡 15弼q .25B.nhL :肆8-占銅HJ 50. *184171旬JS朋I/gp)如曲.IF巧 dn 厂
19、 f歸?用? 1田 imiT le:畀,U 5. fin J -;bgc?触色?叶igl搐r W:己藏;板诃 uut 空UK yp 5. un 3/(14刘蘇fzr*i /Ml丫_ A札丁工Jrr.- B5 ?dervnpE 1.:町匚%2詐/眄Dll创 銘I?跡ISMlSZfIl対g 一嗨心jiHtHt.地f耗就(i4e轉榊r,rhfflti!備flokjTTiiywWE二订牝二年曲廊创上相呵Gn,刊Lit吧;I佃呛?imt 窖QD; qnrjp 九 訓 3/hwtfr/bMV1 藁口IX1?込应 ltd dM.i杜:ri dr* t电trZ怛 噢屮花 t ;】 上 1匕 frv RCLtt
20、右丄init tph:前和i, pjrp 3-g44:l.日(3rha唧虹::和JtYid訂QG:-击丨淀 J:価丿越買-I打耐_1凶_由芒TLisf忙lx朋ltfirM_t Iihtii,iirut davks ilnKi iM-urItIKl lev:Le,-dFJ.A TFWJcdrf ife-jlcE tr pnfe .100ask_led0 compatible 二 *lOOas, leddrv*; pin = ;static i nt chip_demo_gpio_probe (struct platforrTi_device *pdevd&v 1 ce :iode * /3tru
21、eL devic_node *np; int er工= t;int led_pin;P丨云L:口rm J巳甘丄二S 中潯 np = pdev-dv*ofnode;f (*np)return*/ 从np节点从渎取pin S怦的値给口iq rr = of propGrty road li32 (np,J&l&d把ld_pin的值保疗起来供丄歸操作函数便用*7 g_iedpins g lsdent ld_pin;|这里我们还需要注意的一点是:并不是所有的设备树节点都可以转换为P latform_device 。下面看看几条规则:? 根节点下含有compatile 属性的子节点能转换为platform
22、_device ;? 含有特定compatile 属性(它的值是simple-bus,sim plemfd,isa,arm,amba-bus四者之一)的节点的子节点能转换为 Platform_device ;? I2C、SPI总线节点下的子节点不不不能转换为Platform_device ,这些总线下的子节点,应该交给对应的总线驱动程序来处理。下面看一个例子:/rrytest 1 以乍】征a?二.platfc r devicecorn pat 1* =sumnoie-bus;T#?寸回 -附辛筛 J . pt衬orrUdCAdc芒cornpatile = mytest O.i2c fcompt
23、 le = pE5nQEgat24c02coriripa,riie = at?时 c02J plat*or-ii_devceA 二祀/转:$ rplatform devi ze4 斗号;址 J J mt#。rHce細fi:onf?anife =飞snnsng_gpi: fl3shc Trp T.-Ti八 八zt千rmcorpipjiuble w rVinbofid,yv2jq32.|i.stJ(i-rfiHx-fi equency = dev * dr iyer_ve rric* )rrtum ttr c 呻町 pdav - driver_ourp Ld*drv* s-n *)严 AtLcfl
24、Ppt OF itylE rr讥中 fh-SI */ if (!_)-ive r_inatch_cl?viceCdiev t drv) return ”;使阳设备树时的匹配过程Thn try ACPI style Tatch rf (atfl_clrl(zer_iidttli_devijcetiJciu drw) return/* Thert try td natch a护“ft th i d taflLe /rf *pdr id_tshilf)return platfooi mttti ldi;Ddr-id_calLe, pdevj != xllj/* fall-back to driver
25、 rans irrazch */return (t+ rrrpp f. n?itp, Hr 八nwpp) = 3)-enr plt:这里,我们来看第二种匹配方式(使用设备树时的匹配方式)。下面看看 具体如何匹配:flruct phtfonijevice “ mt .h-. taH,nt M员才iJL诫帯I struct 4tvct dcvj II r? rtructctrwt drin4#yr*(uriJij,rtHurct;:-1-1 h 1* Jk *Mlt曲吟Itnitt iP. r rMiTP ircMitlrihutn iKdulLt:;眄,尹Wdjwi r,疋占丁 t 叱hlM /
26、struct platfonjriver /irr riprobe; struct IflttDrr .nicp 为, 汕:rmoveStruct plalfrr-哄、;:e-thvtdonnMsViKt p“:卞T 国“:匸& 冷;irit (iu5|KndJitwrt 订7;皿冷r |pB_f!e5ise_t 5tjtcJ; r_:lU曲iCt T zt杠听声.kt *;rtfuct dfwKfl(iriv?r irlwr; 1flnict devlx曹.drlK iIM./device fiode i:tupprwtjdrtdLrtV* /*:护.” Wr:;冃u ,:*f*;rr it
27、hKt*_W,工玷竹iH 也It.Ul 产吐*_灯严.iM椚If phiridb;-tqjr *Funiiii, ftruct furcHJ 仃张 fwnodt,itrudpFpeNH prmpiPifimctproper -dsfopj,itruddsvic?_!Vft- pirtfit.tVvdthild,其中过程优先匹配,其次是过程,最后是过程。但是,实际上现在主要使用的是过程的匹配,即匹配compatible属性。过程与过程已经过时了,Linux内核不推荐使用这两种匹配方法。在本次实验中,我们的匹配示意图如下:| n -ji-r 1,1 s g071 /:就丿熾IIIl I云-*】同d
28、点” Eff 丫 Ml 訂n-汕丽=3砧.和计h-plarfcrn de/icej . jt : I J : T1,: I Lj S -I 山 a7J h- * I if I- d-l r H rii.J =* (.T - r -ill -b *t实验代码1、应用程序ledtest.c :int main (i nt argc, char *argv) int fd;char status;/* 1.判断参数*/if (argc != 3)prin tf(Usage: %s von | offn, argvO); return -1;/* 2.打开文件*/fd = open (argv1, O
29、_RDWR);if (fd = -1)-prin tf(ca n not open file %sn, argv1); return -1; /* 3.写文件*/if (0 = strc mp (argv2, o n) status = 1;write(fd, & status, 1);elsestatus = 0;write(fd, & status, 1); close(fd);return 0; 运行测试命令:./ledtest /dev/100ask ledO on ./ledtest /dev/100ask_led0 offint main(int argc, char *argv)
30、形式的main函数相关笔记:main()函数有哪几种 形式?。2、驱动层 leddrv.c这一层主要是放一些通用的驱动操作函数,核心代码如:驱动程序入口函数:i/x=.LLl; - i .( H _E lU_ri _呷MMB L r,-,i q. j i|,. ,h T I.*_ : T-7 -JL J -d?寸. tW.打Li.b T 01 J- h IL q 1 二=II - |i h 4lie P tvu -/ * 2 , 电卫自已的fil-T 齐供匸毗22站构谆 st a Li 匚 5 Liuct f ile_operationfl led_dzV = int &rr:chdT sta
31、tus:atrTict inode *inad = filo inotfe(filo); in: Jtiincr = icdtioinode斡printKI . err ccpyfrIf . J , _yiLK_, FUNCTION userHitatus, buf - ;LINE J ;严fSiSAt 号珂X詆皿和兀r I f二W吐二。词Lctl (iBinor, ?t*d3)?t4tum其它代码:厂创建之备节.冃vid 1 ed_c I Sfi 5_c re a tEjis v i cft (i nt minor)/* /dGV/ 100.jjk_Lcd0,. V=gpic=drv_iri
32、it3匕)int err;駅鬧汙.册*err = pl at fcrrn dr i ve r_r6gi 3ter sch i p_dcmo_gpio dui ver)|; 阳注旳冶燥作* /-reg is Ler_led_Dpej:d Lions libodfdjJ 三 fiio_lecl_DprbStatic Struct led_operations to ard_derao_i e d_op r.init = board demo led init,I=II*ctl = boarddemoledctliiLcitic struct .probe .remove -driver* name
33、pldtformdriver chipdemogpiodriver = chiF=deirio=gpio=probe, =chi p_demo_gpi ci_reniove,match table =注skiCO 丄也.static const struct oL_device_id asklOO_Led = , compatible =一;心 IB“n * ,(2) probe 函数:当设备树的compatible 属性与platform_driver中的设备匹配表中的compatible成员互相匹配时会执行此函数获取设备信息。100ask_le(io compatible = lOOas,
34、 leddrv ; pin = ;static int chipdemogpLoprobe(struct platform device *pdev)struct device_node *np;int err = L;int led pin;严从 platform dowLcQ 中讶 I np pdev-dev.of node;device node */if (rnp)return从嘗节点从读取叫i Z属性的債给至err = of_propertv_read_u32 (np, p n * , Ttled_pin);PlTi T 把gd_pM的值保存;U束共led操作函数使用 V gledp
35、insg_l&dcntj = 丄ed_pin;|这里的pin属性与compatible属性(标准属性)类别不同, 自定义属性。我们可以使用of_property_read_u32 函数来获取这些自定义属性的内容。 这些函数大多在文件in clude/li nu x/of.hpin属性是个ZJfSt : k m-il of_cn-e_nrt.划I屯ofi亡itillZb他H cfPflde.full riflnx.21 /i-nd_*oct_by_nnim工J討切_041尢h5 隨出祁冷也kiflRtlinm re讨匚anH-FnnE.F 2J1 srji*id_po(fe bv _p3ftri
36、of_lmd_ri:irit_Dpl3_by_pirth2JI破j5我庐血-il Df.gft_rse3ct.c.hili:jjl srf_y(rl_rtert_frfil.ablE_j.hild;:d of hs,-e_populflrrd st.2|就匀巨_门1忖划417.刃I fLUwis”丄口rnprtbh-塵og dUyic-r i-5 AwVltil*:U酣如dwngn_J of JncLpfopolyJill貳Efi二imp密训刮.悶凸 of ji p+rtys:pTipf rP-f J_FTDpa1y_rBil_u3_inclejJ oCpWpMly呻dUjiL加丹:刃 vLF
37、Eptflf 1ql ul取町:gj of ppperty-Fde-LiJ; ary_tJjJI ep*eptf_*Dj_rtfk3L J J _p fa pty_ -c a dch r g_Kd pu*J rf.5rt_pT3p=-tvjJ af_9_qju_Fdf中可以找到:(3) led寄存器操作相关的代码:/*寄存器物理地址*/#defi ne CCM_CCGR1_BASE (0X020C406C)#defi ne SW_MUX_G PIO 5_IO03_BASE (0X02290014)#defi ne GP IO5_dR_BASE (0X020AC000)#defi ne GPIO
38、 5_GDIR_BASE (0X020AC004) /*映射后的寄存器虚拟地址指针*/static void _iomem *CCM_CCGR1;static void 二iomem *SW_MuX_G PI O5_IO03;static void _iomem *GPIO 5_DR;static void _iomem *GPIO 5_GDIR;/* 初始化 LED, which-哪个 LED */ static int board_demo_led _init (int which) -int group, pin;un sig ned int val;group = GROU P(g _led pin swhich); pin = PIN(g_led pin swhich);prin tk(i nit gpio: group %d, pin %dn, group, pin);/* 100ask_IMX6uLL_Board LED : GPIO5_3 */ if (5 = group) & (3 = pin)/*相关寄存器物理地址与虚拟地址之间的映射 */* 1、地址映射:时钟寄存器*/CCM_CCGR1 = iorema p(CCM_CCGR1_BASE, 4);/* 2、地址映射:模式寄存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年黑龙江农业职业技术学院单招综合素质考试备考试题带答案解析
- 2026年安徽新闻出版职业技术学院单招职业技能笔试模拟试题带答案解析
- 2026年安徽林业职业技术学院高职单招职业适应性测试参考题库带答案解析
- 投资合作2025年协议
- 停车场租赁居间合同2025年服务内容明细
- 2026年池州职业技术学院单招职业技能笔试备考题库带答案解析
- 税务代理服务协议2025年税务代理监督条款
- 2026年湖南艺术职业学院单招综合素质笔试参考题库带答案解析
- 2026年贵州装备制造职业学院单招综合素质考试模拟试题带答案解析
- 2026年宝鸡职业技术学院高职单招职业适应性测试备考试题有答案解析
- DZ/T 0217-2005石油天然气储量计算规范
- 二建《施工管理》计算题之网络图
- 2024年中国新型灵活就业报告-暨南大学x智联招聘-202502
- DBJ-T50-350-2020主城区两江四岸消落带绿化技术标准
- DB51T 2875-2022 彩灯(自贡)工艺灯规范
- 选矿安全第一课
- 电力造价员培训教学课件:第三章 (二)电力工程计价模式
- 垃圾分类房-垃圾分类
- 脓毒症免疫功能紊乱
- 斜弱视眼科学
- 电商平台需求规格说明书-通用版本
评论
0/150
提交评论