BOLMJ Publications स प ण लन स ड ह ईस य हर मर ठ त न. स य भ ष त म ग य क सह. लन स इ ट ल शन प स न ड ह ईस य हर ल ह य पय त सव म हत स य भ ष त आ ण ड ह ईस य हर क स ट व मच सख ल म हत म य आउटप ट छ य च सह.. ल खक:मह श स भ ज ज धव M.S. Software Systems,BITS Pilani. Email ID: mahesh7197@gmail.com
अन म णक : वभ ग प न न बर लन स मर ठ त न :भ ग १: लन सच ओळख आ ण उब ट इ ट ल शन. २ लन स मर ठ त न :भ ग २: लन सच ज न आ ण श न ट म नलच ओळख. ७ लन स मर ठ त न :भ ग ३: कन ल आ ण ड ह ईस य हर च ओळख. १२ लन स ड ह ईस य हर मर ठ त न :भ ग ४: ड ह ईस य हरच ह ल व ड २२ म. लन स ड ह ईस य हर मर ठ त न :भ ग ५: ड ह ईस य हरच प र मटर २९ प स ग म, स स स ब धत म. लन स ड ह ईस य हर मर ठ त न :भ ग ६ :क र टर ड ह ईस य हर २९ ब सक लन स ड ह ईस य हर मर ठ त न :भ ग ७ :क र टर ड ह ईस य हर ३३ फ ईल ऑपर श स लन स ड ह ईस य हर मर ठ त न :भ ग ८:प. स. आय. ड ह ईस य हर ४० ब सक. लन स ड ह ईस य हर मर ठ त न :भ ग ९:य. एस. ब. ड ह ईस य हर ४७ ब सक क स ट. लन स ड ह ईस य हर मर ठ त न :भ ग १०: य. एस. ब. ड ह ईस ५९ य हर फ ईल ऑपर श स. लन स ड ह ईस य हर मर ठ त न :भ ग ११: स प ण य. एस. ब. ड ह ईस ६८ य हर म. लन स ड ह ईस य हर मर ठ त न :भ ग १२: ड ह ईस य हर ल क: ८१ स म फ स, य ट स ल क, पन ल क. लन स ड ह ईस य हर मर ठ त न :भ ग १३: ड ल ड ह ईस य हर ८३ ब सक. लन स ड ह ईस य हर मर ठ त न :भ ग १४: ड ह ईस य हर ड बगर ९० ब सक. स दभ ९१ : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 1
लन स मर ठ त न :भ ग १: लन सच ओळख आ ण उब ट इ ट ल शन. आपण सव जण व ड ज ऑपर ट ग स ट मश एकदम प रचय च आह त, व ड ज बर बरच आणख एक ऑपर ट ग स ट म उदय स आल ह त तच न व य न स य च ऑपर ट ग स ट म च प ढ लनस [Linus Torvalds]य न लन स ऑपर ट ग स ट म म य प तर क ल, लन स रल ज झ ल त 5 ऑ ट बर 1991 ल आ ण त अ तशय स झ ल आजह स ह स प स न त लह न ड ह ईस म य आप य नकळत आपण लन स व पर त असत.आज आप य प रचय च उब ट,र ड ह ट,फ ड र इ य द ऑपर ट ग स ट म च ब स ह लन स ह च आह. लन स क य नट च जगभर त ल ड हलपर य य स स क ड म य नवनव न च ज क न लन स च क ड सम करत असत त. तर लन स ऑपर ट ग स ट म आ ण य च इ टर स शक य स ठ आपण स क य य यल हव... व ड ज व परल आह न त ह??...मग ब स!!...म आह त म य बर बर,आपण मळ न ज ऊय य लन स य सफर वर...मग तय र आह त न लन स शक यल... [ लन स य घर त प हच य स ठ प ढ ल ल क वर टचक म र.http://www.linux.org/.] लन स मर ठ त न आपण य अ क त लन स ऑपर ट ग स ट म कश इ ट ल कर यच त प हण र आह त. आपण व ड ज व परण र अस ल तर उब ट ह व ड ज त लन स व स करण य ल क स ठ म त आह य त य जर इ टरफ स व ड ज स रख आह पण य च ब स लन स आह... य लन स च अज न एक मज हणज तच स स क ड ओप न आह आ ण आपण पण य त आपल क ह तर कड क न क ह भर घ ल शकत..आ ण आपल प शल ऑपर ट ग स ट म : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 2
तय र क शकत... हणज म य स र य कड ख र ल क न पव ण च...तस ह फ र स प न ह..आ ण य त क य वर अवघड पण न ह फ त शक यच तय र प हज... चल मग...आपण आपल स ट म व ड ज म य ब ट कर मग त ए स प अस व व ड ज ७. स ट म च ल झ य वर प ढ ल उब ट य ल कवर ज. http://www.ubuntu.com/download आपण आपल आह त ऑपर ट ग स ट म ठ व न य च बर बर उब ट पण इ ट ल क शकत य म ळ आपल ड ट पण ज ण र न ह आ ण आह य स ट म वर आपण लन स ए ज य क शकत... य म ळ अ जब त घ ब नक.. बनध त य कर... य स ठ उब ट म य व ड ज इ ट लर दल ल आह ज न म ल इ ट ल शन स रख आप य ऑपर ट ग स ट म स बत नव न लन स इ ट ल क न द त. य स ठ उब ट य स ईटवर व ड ज इ ट लर वर टचक म र. य न तर आपण स ह व त हज न प ब स मध न सल ट क न ग ट इ ट लर वर टचक म र. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 3
हज न प ब स य त LST ह ट बल हज न असत य ल उब ट कड न ल ग ट ईम सप ट दल ज त.] न तर न ट ज ऊन Not now, take me to the download ल टचक म र व..[तस त ह दलद र अस ल तर उब ट ऑग न यझ शन ल द णग पण द ऊ शकत ].न तर आपणस प प अप म स ज य ईल त स ह कर व रन कर. मग उब ट इ त ल ह य स स रव त ह ईल. य दर य न आपणस य जर न म प सवड स ह कर व ल ग ल.आ ण उब ट स ठ कत ज ग य यच ह बन स ग व ल ग ल. य स ठ म हत ख ल ल व ड त भर व. य व ड वर क क कर क झ ल आप आप उब ट इ ट ल ह ईल आप य स ट म वर... ३-४ व ळ स ट म र ट ट ह ईल आ ण न तर त ल ग इन व ड ल य ऊन थ ब ल. मग प सवड द ऊन स ट म उब ट म य घ स..एक मध र आव ज य ईल आ ण आपण लन स म य प हचल अस ल...इतक स प आह सगळ.. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 4
आत उब ट आ ण व ड ज म य आलट नप लट न फर य य ट स: स ट म र ट ट क य वर आपणस प ढ ल म ण उब ट क व ड ज अस द न पय य दसत ल. आपणस य द ह मध ल एक पय य नवड न क ण य ह ऑपर ट ग स ट म म य परत ज त य ईल. जस व ड ज ल ख ल य ब ज स ट क ब र असत तस उब ट य वर य ब ज स ट क ब र असत. य ट क ब र य उज य ब ज स आपणस स ट म र ट ट क व शट ड ऊन कर य च पय य उपल द असत त. व ड ज य य क व ड म य व ड ज म ठ,लह न क व ब द कर य स ठ व ड य उज य ब ज स पय य असत त पण उब ट म य त व ड य ड य ब ज स असत त. उब ट व ड य ड य ब ज स अ लक शन वषयक पय य असत त.वर ल क प य त ल बटन ह व ड ज य ट ट म न स रख क म करत य त आपणस ह व त अ लक शन श ध न आपण त उघड शकत. हळ हळ व पर य स स व त क य वर आपणस उब ट एकदम जम नह ज ईल...आ ण आ ण न क च मज य ईल क ह तर ट ऑपर ट ग व पर त अस य च फ ल तर न व व द.. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 5
लन स य क ह मह व य ल स: 1] www.kernel.org :य ल क वर लन सच स स दल ल असत. य य वरत लन स च ट बल हज न दल ल अस ल त पण ड ऊनल ड क स न आप य स ट म वर स ह क शकत.[उद :3.8.3 ह आ त च ट बल हज न आह त दर व ळ अपड ट ह त असत.] २]www.lkml.org : ह लन स च ऑ फ शयल म ल ग ल ट आह.य त आपण भ ग घ व शकत. आ ण हव त आध य म स मध न श ध शकत. य भ ग त क ह श क आ य स व क ठ अड य स न क वच र MJ आह च त म य मदत ल... म झ ह य ग कस व टल ह पण न क स ग... : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 6
लन स मर ठ त न :भ ग २: लन सच ज न आ ण श न ट म नलच ओळख. लन स य नव न आव त न य जर इ टरफ स च स वध आल असल तर लन स च स रव त प स नच ओळख आ ण सव त मह व च फचर हणज ट म नल व ड.य व ड व र आपण स पण स ट म क ल क शकत. आप य व ड ज म य जस ड स कम ड व ड असत तस च उब ट म य ह ट म नल व ड असत. य ल खम ल अ तग त म आपणस लन सच य क व पर कस कर यच य वर भर द ण र आह त. लन स इ टन स ह स य व स य भ ष त आपण स कस समज व न द त य ईल य च म कट न य न कर त आह. म ग ल भ ग त आपण उब ट इ ट ल कस कर यच त प हल आ त आपण उब ट म य आपल स ट म ब ट कर. ट म नल व ड ल च कर य स ठ उब ट य ड य क प य त असल य उब ट सच बटन वर क क कर.आ ण Terminal अस ट ईप कर व मग आपणस ख ल ट म नल व ड दस ल त सल ट क न आपण ट म नल उघड शकत. आपण एक च व ळ अन क ट म न स उघड न य य क वर अगद नर नर ळ क म क शकत ह ट म न स व ड च आणख एक व श ट! आणख एक ग ट हणज लन स च क णत ह ऑपर ट ग स टम य तच य जर इ टरफ स व गळ अस शकत पण श ल /ट म नल श यत स मच असत. य म ळ एकद क ट म नल म य शरल क मग त क णत पण लन स च ऑपर ट ग स टम असत त स रख च भ सत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 7
स टम म य क ह इन ट ल शन कर यच अस य स व इतर क ह च ज स कर यच अस य स आपण स स टमच अ ड म न टर अस व ल गत य स ठ आपणस ट म नलवर ट अक ट तय र क न य व र ल ग इन कर व ल गत ह ब सक ट प प हल आपण शक य. ट अक ऊ ट तय र करण. १) थम ट म नल व ड ओप न कर. २) व ड म य आपण य न व न ल ग इन क ल अस ल त न व दस ल. ३)न तर sudo passwd root ह कम ड व पर. ४) य न तर आप य स ट मच प सवड वच र य म ण द नद ट क. ५)न तर su root ह कम ड व पर. ६)आ ण ट य अक टस ठ नव प सवड (ex:root) अस द ण. ७)मग आपण ट य अक टवर ल ग इन झ ल ल असत. ८)त आपण स एनटर बटन द ब य वर स रव त ल ज थ आपल य जर न म ह त त थ ट ह न व आल ल दस ल. ९)प ढ य व ळ ल परत ट म य ज यच अस य स फ त su root आ ण प सवड दल क आपण ट म य ल ग एन ह त. अ धक म हत स ठ ख ल ल छ य चत पह. आत आपण स ज झ ल आह त ट म नल च प ण त व पर कर य स ठ... : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 8
ट म नल य कम स : ख ल ल श ल कम स लन स व य न स स ठ स मच आह त. ls : ह कम ड च ल डर टर मध ल फ ईल आ ण फ डर द खवत. pwd :कम ड च ल डर टर क णत य डर टर च ल क शन द खवत. ps : ह कम ड स गणक त ल च ल स स द खवत. cat : ह कम ड च ल फ ईल मध ल क ट ट द खवत. cp : ह कम ड फ ईल क प स ठ व परत त य त cp ज न फ ईल नव न फ ईल अस व परत त. mv : ह कम ड फ ईल च न व बदल य स ठ व परत त. mv ज न न व नव न न व. rm: ह कम ड फ ईल डल ट क व रम हल स ठ व परत त. echo : ह कम ड अ य म ट प ठव य स ठ व परत त. grep :एख य फ ईल मध न व श ट श द असण र ओळ श धण. grep श द फ ईलच न व sort :एख द फ ईल व च न य त ल ड ट ओळ न ल वल ज त आ ण त परत फ ईल म य लहल ज त. mkdir :नव न डर टर तय र करण. exit :ट म नल ब द करण. [Ref:Unix Made Easy:Tata McGrow-hill:Muster] हच अल एड टर: ट म नल म य म ल ह य स ठ हच अल एड टर हणज च VI ए डटर व परत त. य च च स ध रत हज न VIM ह पण लन स न दल ल आह फ त य त क ड नर नर य कलर क ड म य दसत ब क VIM ह अ तग त vi एड टरच व पर त असत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 9
vi एड टर ह एकतर कम ड म ड म य क व इ स ट म ड म य च लत हणज एक तर क ड लह शकत न ह तर क ड म य बदल क शकत पण द ह एक च व ळ न ह. कम ड म ड म य एड टर र ड ओ ल म ड म य च लत. थम vi फ ईल च न व अश कम ड द ऊन आपण फ ईल एड टर म ड म य उघड शकत. न तर i बटन द ब न मग आपण य एड टर म य लह शकत. लह न झ यवर Esc बटन द ब य वर एड टर र ड ओ ल म ड म य ज त. कस ल हलव य स ठ h, j,k,l ह बटण व परत त. एड टर य फ ईल मध न एख द श द श ध यच अस य स /श द अस श धल ज त.आ ण प ढच श द प ह य स ठ परत n बटन द ब न न ट ज त य त. एड टर मध न ब ह र पड य स ठ Ctrl+Q बटन द व व आ ण न तर q! कम ड व पर व. आ ण फ ईल स ह क न ब ह र पड य स ठ wq! ह कम ड व पर व. एख द ओळ डल ट कर य स ठ dd ह कम ड व पर व. एख द ओळ जर च क न डल ट झ ल अस ल तर तल परत आण य स ठ u कम ड व पर व. एख द अ र डल ट कर य स ठ कम ड म ड म य ज ऊन य अ र वर कस लन ऊन x बटन द ब व. एख य श द य प ढ न च ल क रच अस य स य श द वर ज ऊन a ह बटन द ब व मग य प ढ ल अ र वर कस ल श ट ह त. एख य व श ट ओळ ल ज य स ठ :ओळ न बर [:११२]आ ण ए टर ह कम ड व परत त. एख द अ र र ल स कर य स ठ य अ र वर ज ऊन r बटन द ब व आ ण न तर नव न अ र द ब व त अ र र ल स ह ईल. आपण य अ क त आपणस म ग स ठ ल गण य ब सक कम ड प ह य, य च व पर आपण स vi एड टर म य म ल हत न न क ह ईल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 10
य शव य ब य च कम ड आह त पण आपण जत य ल गत ल तत य च कम ड शकल आह त. अ धक कम ड ज ण न घ य स ठ प ढ ल ल क वर टचक म र. ट स: ट म नल म य आध व परल ल कम ड परत प ह य स ठ व व पर य स ठ अप-एर - क व पर व. तस च एख य फ ईल च न व ट ईप कर य ऐवज य फ ईलच स रव त च क ह अ य र ट ईप क न tab बटन द ब व मग फ ईल च प ढच न व आप आप य ईल. अश त ह न आपण ट म नल कम ड आ ण vi एड टर य कम स प ह य,प ढ य अ क त आपण: कन ल आ ण ड ह ईस य हर च ओळख क न घ ण र आह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 11
लन स मर ठ त न :भ ग ३: कन ल आ ण ड ह ईस य हरच ओळख. नम क र,य भ ग त आपण लन स कन ल आ ण ड ह ईस य हर य च ओळख क न घ ण र आह त, य च आपण स ड ह ईस य हर म तय र करत न फ र फ यद ह ईल. कन ल ह लन स ऑपर ट ग स ट मच ग भ आह. लन स क य नट सतत य कन ल ल स ध रत असत त व कन ल च नवनव न हज न रल ज करत असत त. लन सच कन ल ह c आ ण assembly य द न भ ष त ल हल आह. कन ल ह कन ल प स म य रन ह त असत. कन ल ह स टम च ह ड व अर आ ण य जर च अ लक श स य य त ल मडलव अर च क म करत. कन लच अस ल क ड ह ह ड व अर वर अवल ब न असत ब क स क ड ह फ र म ठ आह त ह ड व अर वर अवल ब न नसत. कन ल ह य जर कड न ड ट घ ऊन त स सर, म मर इतर ड ह ईस य य श क य नक शन करत असत. लन स कन ल लन स शक य च खर मज य त ज ह आपण स ट म इ टरन स शकत. लन स य जस जस आत घ सत ज त तसतश क ल सट व ढत आ ण ततक च त शकण र म चक र ह त. आपण य अ क त लन स य ग य त न क क य दडल ल आह त प ह य. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 12
लन स कन ल : य न स स ट म ह अन क स स एकच व ळ ह त ळत असत य च ब स हणज ऑपर ट ग स ट म च कन ल,कन ल ह ऑपर ट ग स ट मच प वर, म मर, स स य मह व य ग ट स भ ळण र म ठ ब स क ड असत.कन ल ऑपर ट ग स ट म म य ख ल ल म ण व गव ग य भ मक बज वत. स स म न जम ट:अन क स स तय र करण, य स सरल प ठव न श य ल न स र च लवण आ ण न तर स स ब द करण ह कन लच स स म न जम टच क म. म मर म न जम ट : स स ल म मर मळव न द ण क म झ यवर त म कळ करण आ ण उपल द म मर च हच अल अ सव प न नय जन करण. फ ईल स ट म: लन स च ब स हणज य च फ ईल स ट म. लन स म य सगळ क ह फ ईल अस च म नल ज त हणज अगद फ डर हणज पण फ ईल च असत आ ण स ट म ल ज डल ल क णत ह ड ह ईस ह ह ऑपर ट ग स ट म स ठ फ ईलच असत... ह आह न म त ग ट.. लन स कन ल य फ ईल स ट मच चरल ल यर ह ड व अर य वर तय र करत. [अश अन क फ ईल स ट म आह त लन स म य,उद :FATफ ईल स ट म] ड ह ईस क ल: स ट म ल ल वल य य क ड ह ईस क म क न घ य स ठ क ह ठर वक क ड र न क ल ज त. य ल ड ह ईस य हर हणत त कन ल म य स ट म च ब सक ड ह ईस य हर इन ब ट असत त.उद : क-ब ड च ड ह ईस य हर. न टव क ग:न टव क ग च प क स तय र करण प ठवण आल ल प क स ओळखण आ ण य च व पर करण य स र य न टव क ग य ग ट कन ल ह त ळत. [Ref:Linux device driver :orelly:hartman] कन ल प स आ ण य जर प स: य जर प स:य जरच म,shell क व इतर अ लक श स ह य जर प स च भ ग आह त.य अ लक श स न स ह ड व अर बर बर म हत च द व णघ व ण क य च असत पण त ड यर ट क शकत न ह त य स ठ य न कन ल च मदत घ व ल गत. कन ल प स:कन ल ह ह ड व अर बर बर ड यर ट स भ षण कर त असत त.य त ड ह ईस य हर आ ण य च फ श स, स ट म क स ह य जरल ह ड व अर श स ब धत क म कर य स मदत : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 13
करत त. य व र र ड, र ईट ऑपर श स करत य त त.य म ड म य य जर ल प ण अ धक र असत त. ड ह ईस य हरह अ लक श स आ ण ह ड व अर य य त ल द व हण न क म करत. य जर प स [अ लक श स] कन ल प स [ ड ह ईस य हर] १ ह ड व अर २ ड ह ईस य हर हणज क य? आप य स टमल ड ह ईस ज ड य वर त ड ह ईस कस क म कर व य स ठ स टमम य य ड ह ईसस ठ च त ड ह ईस कस क म कर व ह ठरव य स ठ क ह क ड ल हल ल असत य स ड ह ईस य हर हणत त.जस आपण आप य स टमल क ह नव न ड ह ईस ज डल क आप य ल य ड ह ईस च य हर इ ट ल कर व ल गत य न तरच त ड ह ईस क म कर यल स रव त करत. क ह य हर स टम म य च असत त आपण ड ह ईस ज ड य वर त ल ड ह ऊन क म क ल गत त. जस आपण प न ई ह आप य क य टर ल ज डल क आपल क य टर य स ठ च य हर आप आप इ ट लकरत मग आपल प न ई ह च ल ल गत. लन सच एक म त फचर हणज ऑपर ट ग स ट म च ल असत न आपण ड ह ईस य हर ल ड क व अन ल ड क शकत य स ठ स ट म र ट ट कर यच गरज न ह.य च लन स य स वध म ळ लन स स ह स म य व परत त. ड ह ईस य हर य मल कन ल य भ ष त म य स अस ह हणत त. य क म य ल ह य ल दल य ड ह ईस स ब धत क मक ज प हत. ड ह ईस य हरच क र टर य हर [ब ईट ड ट सफर], ल क य हर[ ट र ज ड ह ईस],न टवक य हर[प क स ड ट सफर] अस क र पडत त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 14
आप य ट म नल व ड म य ज ऊन ls /usr/src/linux/drivers/ ह कम ड द य स आपण स आप य लन स स ट म मध ल ड ह ईस य हर प ह यल मळत ल. म य स कम स: म य स ह.ko [कन ल ऑ ज ट ]फ ईल य प त असत त.ख ल ल कम स ट म नलवर व प न आपण आपण स हव त म य ल कन ल म य घ ल क व कन ल मध न क ढ शकत. lsmod : ह कम ड आप य स गणक त ल म य स हणज च ड ह ईस य हर च ल ट द खवत. [न द :प ढ ल कम ड म य आपण स कम ड बर बर फ ईल च न व य व ल गत ]. insmod म य ल फ ईल : ह कम ड व प न आपण आपणस हव त म य ल कन ल म य घ ल शकत. modprobe म य ल फ ईल : ह कम ड व पर य स,आपणस हव त म य ल व य म य लश नगड त अस म य स आप आप कन ल म य ज त त. rmmod म य ल फ ईल : ह कम ड व प न आपण आपणस हव त म य ल कन ल मध न ब ह र क ढ शकत. अश त ह न आपण य भ ग त कन ल आ ण ड ह ईस य हर य च ओळख क न घ तल आह.आपणस ड ह ईस य हर म लहण च ल कर य आध ह ब सक म हत समजण फ र मह व च आह. प ढ ल अ क त आपण ड ह ईस य हरच ह ल व ड म कस लह यच त प हण र आह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 15
लन स ड ह ईस य हर मर ठ त न :भ ग ४: ड ह ईस य हरच ह ल व ड म. आपण क णत ह नव न म ग भ ष शकत न स रव त ह ल व ड म य ब सक म प स न करत.य भ ग तह आपण लन स ड ह ईस य हरच ह ल व ड म म ल हण र आह त. य भ ग त आपण म गल ल गण य सव ब सक ग ट शकण र आह त य म ळ ह भ ग फ र मह व च आह.प ढच म करत न ब य च व ळ आपणस य भ ग च र फर स दल ल आह. ड ह ईस य हर म ह ल य र स रख क म करत य च अथ अस क अ लक शन य य त ल फ श स रन करत.ह म c य भ ष त ल हल ज त पण य य त C म य व परत तस main() ह फ शन नसत.ह म कन ल व र ल क आ ण ल क क ल ज त य स ठ य स क प ईल करण गरज च असत. लन स ड ह ईस य हर म य क टर आ ण ड टर असत त.म य ल ल ड क य वर क टर क ल क ल ज त. आ ण rmmod व र म य ल क ढ न ट क य स ड टर क ल क ल ज त य हर म य म य ल init,exit फ श स ह क म प हत त. लन स ड ह ईस य हर म लह य स स रव त कर य अग दर आपण प ढ ल ग ट व स ट ग करण मह व च आह. आप य लन स क य टरमध ल ट म नल व ड ओप न कर. ट अक ट न ल ग इन कर [su root]. [ ट अक ट कस तय र कर व ह ज ण न घ य स ठ य थ टचक म र.] न तर whoami [म क ण ] ह कम ड व प न आपण ट अक ट मध च आह त क य च ख क न घ ण. न तर आपण ह म म य एक फ डर तय र कर व ज थ म ट अर करत य त ल. आ ण य फ डर म य ज व.[cd /home/mj/]म MJ न व च फ डर तय र क न य त क म करण र आह. आपण क ण य फ डर म य आह ह ज ण न घ य स ठ pwd ह कम ड व पर व हणज आपल च ल डर टर क णत त समज ल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 16
आपण vi एड टर व प न आपल म लहण र आह त तर vi hello.c ह कम ड द य वर अग दर जर hello.c फ ईल अस ल तर त ओप न ह ईल अ यथ नव न hello.c फ ईल तय र ह ईल.आ ण आपण हच अल एड टर य [vi] म य ज ऊ. vi म य म लह य स ठ आध i बटन द ब व तरच vi एड टर इ सट म डम य य त आ ण आपण vi एड टरम य लह शकत. य न तर ख ल ल म प ट कर व क व ट ईप कर व. क व ड यर ट लन स य ट ट एड टर म य ज ऊन क ड क प प ट क न त फ ईल.c ए सट शन द ऊन स ह कर. ह ल व ड म: #include<linux/init.h> #include<linux/module.h> MODULE_LICENSE("GPL"); static int hello_init(void) printk(kern_alert "Hello world"); return 0; static void hello_exit(void) printk(kern_alert "Goodby"); module_init(hello_init); module_exit(hello_exit); आपण वर ल म य क डच प ट करण ओळ न पह त ज ऊय. म य स रव त ल क ह ह डर फ ईल इ ल ड कर य ल गत त. य इ ल ड फ ई सच आप य स गणक त ल ल क शन प ह य स ठ /root/inclue/linux य ल क शन वर ज आपल स ड ट एच [.h]फ ई स च स ठ मळ ल. 1) init.h ह फ ईल init ह स स ट ट कर य स ठ इ ल ड क ल ज त. जवळप स सव च म म य ह फ ईल इ ल ड कर व ल गत.य ह डर फ ईलम य स ट म ब ट आ ण म य स कन ल म य ट क य स ठ व क ढ य स ठ य च उपय ग ह त.init आ ण exit ह फ श स य च फ ईल म य डफ ईन क ल आह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 17
2) आपण जर ड ह ईस य हर लह त अस तर module.h फ ईल इ ल ड करण ब धनक र आह.य फ ईल म य म य सश नगड त फ श स उपल द असत त. 3) MODULE_LICENSE ह ओळ आपण GPL ह ल यस स व परण र आह त स गत. GPL च अथ न प लक ल यस स [GNU Public License]अस ह त. 4) ज ह म य ल कन ल म य ल ड ह त त ह hello_init ह फ शन क म करत.य फ शनल इ नशल यझ फ शन हणत त.जर ह फ शन फ ल झ ल तर त एरर क ड रटन करत हण न ह फ शन कध च void नसत. 5) printk फ शन :जस आपण c म ग म य printf व परत ह त तस लन स कन ल म ग म य prink()ह ट ग स ठ फ शन व परत त.य फ शनम ळ ग ड ट ह कन ल य ल ग बफर म य स ठवल ज त. prink म य अज न एक स वध असत त हणज म स जच मह व ठरवण य स ठ म स ज य स रव त ल क ह ट ग ल वत त. printk फ शन म य व गव ग य आठ loglevel असत त. य kernel.h य फ ईल म य कन ल म य इन ब ट असत त. printk फ शन य आठ ल ग ल हल ख ल ल म ण : KERN_EMERG : ह ल हल म स ज ज ह इमज स अस ल त ह व परत त.उद : स स ब द ह ण. KERN_ALERT: ल व ध न घ य स ठ. KERN_ERR :च क दश व य स ठ KERN_CRIT: ट कल सर यस ह ड व अर व स टव अर ल म स ग य स ठ. KERN_WARNING :ध य च स द श द य स ठ. KERN_NOTICE:स ध न ट स म स ज स ग य स ठ. KERN_INFO:म हत स ग य स ठ. KERN_DEBUG:ड ब ग ग करत न म स ज प ह य स ठ. वर ल म म य आपण Hello world ह म स ज ल ग करण र आह त. 6) य न तर रटन फ शन व र आपण फ शन क ल करत न आल य एररच क ड रटन क ल ज त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 18
7) म य ल कन ल मध न क ढ न ट क य स ठ hello_exit ह फ शन व परत त.ह फ शन रन झ य न तर GoodBy ह म स ज ल गम य र क ड ह त. 8) module_init ह फ शन कन ल ल म य स इ नशल ईझ झ यवर क णक णत फ शन रन कर यच त स गत त. 9) module_exit ह फ शन कन ल ल म य स क ढ न ट क य वर क णक णत फ शन रन कर यच त स गत त म एड टर म य ट इप क न झ य न तर Ctrl+Q बटन क व Esc द ब न आपण ए डटर मध न ब ह र पड व. म स ह क न ब ह र पड य स ठ wq! ह कम ड व पर व. आत आपल प हल म तय र झ ल आह त परत एकद प ह य स ठ आपण.c फ ईल ट ट एड टर मध न ओप न क न च क क शकत क व cat hello.c ह कम ड द ऊन फ ईल र ड ओ ल म ड म य बर बर आह क त प ह शकत. म क फ ईल: वर ल क ड रन कर य अग दर त म क फ ईल व प न क प ईल कर व ल गत. य स ठ आपल म य फ डर म डग आह यच फ डर म य Makefileन व च फ ईल तय र करण अ यथ त ह ल त म य फ ईल च प ण प त य व ल ग ल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 19
[न द:य त ल Makefile ह श द क स स स ट ह आह य म ळ M ह क प टल ल टस म य हव.] obj-m सम र क णक णत म य स ब ड कर यच आह त य च न व य व त. य न तर.o,.koस र य फ ईल क प ईल झ य वर आप आप तय र ह त ल. [न द:य म य आपण आप य फ ईल च न व.c य ए सट शन च व पर न करत.o [ऑ ज ट] य ए सट शन च व पर करण र आह त] ख ल ल क ड Makefileम य प ट कर व. obj-m +=hello.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean क डच म हत : shell uname r : ह कम ड आप य स ट म वर कन ल च क णत हज न आह त श धत.प ढ ल ओळ ह दश वत क, ल ड ह ण र म य ल ह कन ल च भ ग आह आ ण ल ड झ य न तर त कन लच भ ग बन ल. म प ढ ल म ण रन करण : ट म नल व ड म य ज ऊन आपल म क फ ईल अस ल य फ डर म य ज ण. make कम ड व प न आपल क ड आपण क प ईल कर व क ड क प ईल झ ल तरच ब क सप ट ग फ ई स तय र ह त ल अ यथ एरस च म स ज मळ ल. य च बर बर क ण य ओळ ल च क झ ल आह य ओळ च न बर पण मळ ल. आपण परत vi hello.c क न क ड म य ज ऊन आव यक च ज स कर व त. sudo insmod hello.ko: ह कम ड व पर य वर आपल म य ल कन ल म य इ ल ड ह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 20
आत त झ ल क न ह ह च क कर य स ठ कन ल ल ग मध ल म स ज प ह य स ठ dmesg ह कम ड व पर. आपण स Hello World ह म स ज दस ल हणज इ न शयल यझ शन फ शन स रळ त च लत अस ल. lsmod ह कम ड व प न आपल म य ल ह ल ट म य आह न त च क करण. न तर आपल म य ल क ढ न ट क य स ठ sudo rmmod hello.ko ह कम ड व पर आ ण dmesg कम ड व प न म स ज च क करण. [न द : आपण एक म य ल एकद च इ सट क शकत द स य द त इ सट कर यच अस य स आध च म य ल क ढ न मग परत स ध रत म य ल इ सट कर व. ] अश क र आज आपण कन ल च ब सक म कस कर व ह शकल त. म आप य ल स प ज व हण न म क ल ल म फ ई स ज डल य आह त.ख ल ल hello.c आ ण Makefile य च.txt ह ए सट शन क ढ न य फ ई स आपण जश य तश व प शकत.[ह ए सट शन फ ईल ल गल ज ड य स ठ म ल वल ल आह.] आपल वत च ड ह ईस य हर कस व टल आप य ल..झक स न.. आत य च म म य स ध रण करत करत आपण प ढच म शकण र आह त.मग तय र रह... [Ref: Linux For You magazine] : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 21
लन स ड ह ईस य हर मर ठ त न :भ ग ६: ड ह ईस य हरच प र मटर प स ग म, स स स ब धत म. म ग ल भ ग त आपण ब सक ह ल व ड च म प हल त,इत य स य प त न ड ह ईस य हर लह यल त ह ल न क च मज आल अस ल.य भ ग त आपण थ ड प ढ ज ऊन व गव गळ ब सक स शकण र आह त. समज त ह ल त म य ड ह ईस य हरल क ह प र मटर य यच असत ल तर त कस य यच त आपण य अ क त प ह य. थम आपण आप य म य लल फ त एक प र मटर कस प ठव यच त प ह य. #include<linux/init.h> #include<linux/module.h> #include<linux/moduleparam.h> MODULE_LICENSE("GPL"); int paramtest; module_param(paramtest, int,s_irusr S_IWUSR); static int param_init(void) printk(kern_alert "Showing the parameter demo"); printk(kern_alert "VALUE OF PARAMTEST IS: %d",paramtest); return 0; static void param_exit(void) printk(kern_alert "Exiting the parameter demo"); module_init(param_init); module_exit(param_exit); [Ref: Linux For You magazine] वर ल म म य म य ल प र मटर श नगड त फ श स च ल भ घ य स ठ moduleparam ह फ ईल ह डर म य इ ल ड क ल ल आह. module_param(paraameter name, data type,permission); ह फ रम ट कन ल ल प र मटरच न व, य च ड ट ट ईप आ ण य स द य ज ण य पर मशन दश वत. पर मशन च ५ क र पडत त: S_IWUSR,S_IRUSR,S_IXUSR,S_IRGRP,S_WGRP : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 22
य त S_I ह ह डर सव न क मन आह. R =र ड व चण,W =र ईट ल हण,X= ए झ य ट करण. USR=य जर,GRP= प य त OR हणज ऑर ऑपर शन क न एक प ज त पर मशन स ट करत य त त. ह म रन कर य स ठ प ढ ल प य य आह त. आप य म क फ ईल म य hello.o य ज ग आप य वर ल फ ईल च न व [parameter.o] द ण.आ ण फ ईल स ह करण. न तर make ह कम ड व प न फ ईल क प ईल करण. आत ह म य ल कन ल म य ट क य स ठ :sudo insmod parameter.ko paramtest=2 : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 23
ह कम ड व परण य त आपण paramtest य स २ ह स य प र मटर हण न प ठवल. आत आपल आउटप ट प ह य स ठ dmesg कम ड व परण. त ह आपण स Value of paramtest=2 अस आउटप ट मळ ल. प र मटरच अ र : आत एक प ज त प र मटर प स कर य स ठ प र मटरच अ र प ठव व ल गत. य स ठ प ढ ल म पह : #include<linux/init.h> #include<linux/module.h> #include<linux/moduleparam.h> MODULE_LICENSE("GPL"); int paramarray[3]; module_param_array(paramarray, int,null, S_IWUSR S_IRUSR); static int array_init(void) printk("into the parameter Array demo"); printk("array elements are :%d\t%d\t%d",paramarray[0],paramarray[1], paramarray[2]); return 0; static void array_exit(void) printk("exiting the array parameter demo"); module_init(array_init); module_exit(array_exit); य त int च ३ इतक स ईझ असल ल अ र व परल आह. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 24
अ र ह प र मटर हण न व पर य स ठ module_param() य ज ग module_param_array() ह फ शन व परल आह. य त इतर प र मटर स बत counter असत ह कत प र मटर प स क ल य च न द ठ वत आपल म म य त स वध व परल न ह आह हण न आपण त ० अस ठ वल आह. आपण sudo insmod parameterarray.ko paramarray=1,2,3 अस प र मटर अ र स बत म य ल ल ड करत. त ह आपणस dmesg क य वर य त न स य आउटप ट नवर दसत ल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 25
स स स ब धत म. आप य स गणक त अन क स स च ल असत त आप य ल प ढ ल म लहत न क णत स स च ल आह क णत स स ब द आह य च म हत स स आय ड ह म हत स ट म कड न घ व ल गत अश व ळ आपण स प ढ ल स स स ब धत म न क च उपय ग त य ईल. #include<linux/init.h> #include<linux/module.h> #include<linux/sched.h> MODULE_LICENSE("GPL"); static int test_init(void) struct task_struct *task; for_each_process(task) printk("process Name :%s\t PID:%d\t Process State:%ld\n",task->comm,task->pid, task->state); return 0; static void test_exit(void) printk(kern_info "Clearing up.\n"); module_init(test_init); module_exit(test_exit); लन स म य य क स सल क ह ग ट ज ड य ग ल य असत त जस क स सच आय ड न बर, स स च च ल थत ल ग इ य द. स स स ब धत म ल हत न आपणस sched.h ह फ ईल ह डर म य इ ल ड कर व ल गत. आपणस task_struct य चर च प टर क न य य आध र आपण भरप र म हत मळव शकत. आपण वर ल म म य आप य स ट म मध ल स सच आय ड न बर, स स च च ल थत ल ग इ य द म हत प ह. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 26
य त task न व च प टर तय र कर य त आल ल अस न आपण आप य स ट म मध ल स स य चर प टरच व पर क न ड ल करण र आह त. ह म रन क य न तर आपण स स स च ल ट दस ल. अश र त न आपण आप य स ट म मध ल स स ब ल प ण पण म हत घ व शकत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 27
य स स आय ड आपण इ टरन टवर सच क रण आपणस ह य य स स ब ल अ धक म हत घ व शकत.तस च क णत स स क णत अ लक शन च ल आह य च ट ट क य ह स म हत मळत. अश र त न आपण प र म टर प स ग आ ण स स श नगड त म कस रन कर व त प हल त.प ढ ल भ ग त आपण क र टर ड ह ईस य हरच म हत घ व य. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 28
लन स ड ह ईस य हर मर ठ त न :भ ग ७ :क र टर ड ह ईस य हर ब सक आपण ब सक ड ह ईस य हर कस लह यच ह प हल त,आत ख स क र टर ड ह ईस य हर कस लह यच त य अ क त प ह य. आपण म ग ल लन स कन ल य भ ग त ह पण शकल आह त क लन स म य ड ह ईस स एक फ ईल य प त असत.य ड ह ईस फ ईलच न व ह आप य स ट मवर ल अ लक शन आ ण ड ह ईस फ ईल य य त ल द व हण न क म करत.आ ण ड ह ईस फ ईल आ ण ड ह ईस य य म य स भ षण कर य स ठ य ड ह ईसच न बर मह व च असत. ड ह ईस फ ईलच न बर ह द न न बर य ज ड न बनल ल असत :म जर न बर आ ण म यनर न बर. <major,minor>.आप य स टमम य अन क य हर एख द म जर न बर [क मन] व प शकत पण य च म यनर न बर व गळ अस ल.कन ल म यनर न बर च व पर न क क णत ड ह ईस कन ट क ल आह त समज न घ य स ठ करत. आप य स ट म मध ल क र टर ड ह ईस य हर प ह य स ठ प ढ ल कम ड ट म नल व ड द ऊन प ह शकत. $ ls l /dev/ grep ^c ls l /dev :य कम ड न आपण सव ड ह ईस प ह शकत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 29
त आपण स प ढ ल म ण दस ल: य त brw : ह ल क ड ह ईस य हर तर crw क र टर ड ह ईस य हर दश वत त. dev_t ह रएबल य म य द ह न बर स ठवल ल असत त. [१२ ब ट म जर +२० ब ट म यनर=३२ ब ट ड ह] MKDEV( int major,int minor) ह कम ड व परल क ड ह ईस dev तय र ह त. आपल ड ह ईस फ ईल ह ड ह ईस य हरल ज ड य स ठ प ढ ल द न प य य आह त. १.आप य ड ह ईसच <major,minor> न बर द ऊन र ज टर करण. २. ड ह ईस फ ईल य ऑपर श स आ ण ड ह ईस य हर च फ श स ज डण. ड ह ईसच न बर मळव य स ठ <linux/fs.h> मध ल प ढ ल API फ र मह व च आह त. int register_chardev_region(dev_t first,unsigned int count, char *name); int alloc_chardev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name); void unregister_chardev_region(dev_t first,unsigned int count); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 30
प हल API ह cnt इतक न बर असल ल ड ह ईस र ज टर करत. जर ह फ श स यव थतपण च ल तर त ० ह रटन करत आ ण जर क ह ल म आल तर नग ट ह स य रटन ह त. द सर API ह आप आप म कळ म जर न बर श ध न ड ह ईस र ज टर करत.त प हल म यनर न बर ह श यत ० ह च असत. तसर API ह आपल स आपल ड ह ईस न बर व प न झ य वर म कळ कर य स ठ व परत त.ह API ल न अप फ शन म य व पर व. [REF:Linux Device Driver Book] ड ह ईस न बर दश वण र म: #include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> static dev_t first; //globle variable for the device no int init ofd_init(void) /*const*/ printk(kern_info "NAMSAKAR:ofd reg"); if (alloc_chrdev_region(&first, 0, 3, "Mahesh") <0) return -1; printk(kern_info "<Major,Minor>: <%d,%d> \n", MAJOR(first),MINOR(first)); return 0; static void exit ofd_exit(void)/*destructor*/ unregister_chrdev_region(first, 3); printk(kern_info "by Gn:ofd unreg"); module_init(ofd_init); module_exit(ofd_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("MJ"); MODULE_DESCRIPTION("OUR FIRST character DRIVER"); ह म रन क य न तर mahesh न व च ड ह ईस य हर तय र ह ऊन य च म यनर आ ण म जर न बर आपण स दस ल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 31
वर ल आउटप ट व ड म य आपण आप य ड ह ईस च म जर न बर आ ण म यनर न बर ड ल झ ल ल प हल त ह आपण आप य ममध ल printkफ शन व प न आउटप ट व ड म य द खवल आह त. वर ल च त आपण आपल ड ह ईस स टम म य र ज टर झ ल आह क न ह ह /proc/device म य ज ऊन प हल य थ आपण mahesh न व च ड ह ईस तय र झ ल ल दस ल.न तर आपण /devम य ज ऊन प ह य स आपण स ड ह ईस फ ईल तय र झ ल न ह ह कळ ल मग आपण mknodच व पर क न न ड तय र क ल व य त आप य ड ह ईस स ठ फ ईल तय र झ ल ल दस ल. ह च क म आपण ऑट म टक पण क शकत त आपण प ढ ल भ ग त प हण र आह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 32
लन स ड ह ईस य हर मर ठ त न :भ ग ८ :क र टर ड ह ईस य हर फ ईल ऑपर श स. क र टर ड ह ईस य हर ह य च फ ईल ल ज डल ग ल ल असत आपल सव क म त फ ई स य म यम त न प ण करत. फ ईल ऑपर श स य चर म य पण फ ईल च सव फ श स ड ल अर क न आपण त फ ईल ओपन क ज, र ड,र ईट क शकत. य क फ शन म य स य आपण य फ शन च ट क न न व द ऊ. य म ळ कर टर ड ह ईस य हर च ब सक म ख ल ल म ण ह ईल. #include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/cdev.h> static dev_t first; //globle variable for the device no static struct cdev c_dev; //globle var for char struct static struct class *cl; //globle var for device class static int my_open(struct inode *i, struct file *f) printk(kern_info "Driver :open()\n"); return 0; static int my_close(struct inode *i, struct file *f) printk(kern_info "Driver:close()\n"); return 0; static ssize_t my_read(struct file *f,char user *buf,size_t len,loff_t *off) printk(kern_info "Driver:read()\n"); return 0; static int my_write(struct file *f,const char user *buf,size_t len,loff_t *off) printk(kern_info "Driver:write()\n"); return len; static struct file_operations pugs_fops=.owner = THIS_MODULE,.open = my_open,.release =my_close,.read =my_read,.write =my_write ; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 33
static int init ofcd_init(void) /*const*/ printk(kern_info "NAMSAKAR:ofd reg"); if (alloc_chrdev_region(&first, 0, 3, "Mahesh") < 0) return -1; if ((cl = class_create(this_module, "chardrv")) == NULL) unregister_chrdev_region(first, 1); return -1; if (device_create(cl, NULL,first, NULL, "mynull") == NULL) class_destroy(cl); unregister_chrdev_region(first, 1); return -1; cdev_init(&c_dev, &pugs_fops); if (cdev_add(&c_dev, first, 1)== -1) device_destroy(cl,first); class_destroy(cl); unregister_chrdev_region(first,1); return -1; return 0; static void exit ofcd_exit(void)/*destructor*/ cdev_del(&c_dev); device_destroy(cl, first); class_destroy(cl); unregister_chrdev_region(first,1); printk(kern_info "by Gn:ofd unreg"); module_init(ofcd_init); module_exit(ofcd_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("MJ"); MODULE_DESCRIPTION("OUR FIRST character DRIVER:automatic"); [REF:Linux for you magazine] : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 34
क णत.h फ ईल कध इ ल ड कर व : #include <linux/init.h> : ब सक इ न शयल यझ शन #include <linux/module.h> :क णत ह म य स लहत न #include <linux/version.h> : लन स हज नच ड ट मळव य स ठ. #include <linux/kernel.h> : prinitk() ह फ शन व परत य य स ठ. #include <linux/fs.h> :फ ई स य नगड त ऑपर श स कर य स ठ #include <linux/device.h> : ड ह ईस श नगड त ऑपर शन करत न. #include <linux/cdev.h> :म जर व म यनर न बरसह कर टर ड ह ईस तय र कर य स ठ. #include <linux/slab.h> :kmalloc() ह फ शन व पर य स ठ. #include <linux/errno.h> :एरस च क ड य फ ईल म य असत. #include <linux/types.h> :size_t,dev_t य स रख ड ट ट ईप सप ट स ठ. #include <linux/fcntl.h> :o_accmode स ठ #include <asm/system.h> :cli(), _flags व पर य स ठ #include <asm/uaccess.h> :copy_from /to _users य स रख फ श स व परत न. module.h मध ल फ श सच म हत : MODULE_ALIAS(_alias) य जर प स म य म य लच न व व म हत द य स ठ. MODULE_LICENSE(_license) म य ल क णत ल यस स व परण र आह य च न व. MODULE_AUTHOR() म य लच ल खक. MODULE_DESCRIPTION() म य ल य क म वषयक थ ड य त म हत MODULE_PARAM() म य ल ल ड करत न प स क ल ज ण र प र मटर MODULE_VERSION() व पर य ज ण य म य ल च हज न आपण modinfo म य लच न व.ko अश कम ड दल असत वर ल सव म य ल श नगड त म हत आपणस मळत. फ ईल ऑपर श स य क ह मह व य ग ट : वर ल क ड म य ओपन आ ण ल ज फ शन int रटन करत त,० हणज यश व पण प र पडल आ ण नग ट ह हणज क ह तर ल म आह.पण र ड आ ण र ईट ह फ श स क ह प झ ट ह न बर रटन करत त त हणज कत ब ईट ड ट र ड क व र ईट झ ल हण नच य फ श स च रटन ट ईप ssize_t आह. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 35
तस च आणख एक म त ग ट आह...read() ह फ शन len ब ई स इतक ड ट buf य बफर म य ल हत आ ण कत ब ई स ल हल त त स य रटन ह य हण न प ठवत. हणज च र ड फ शन ह य जर प स फक बफर म य ड ट ल हत क रण त य जरल व चत व व परत य व...आह न ग मत र ड फ श स बफर म य र ईट करत... क ह मह व च क डच भ ग: loff_t (*llseek) (struct file *, loff_t, int); य त llseek ह म थड फ ईल च च ल र ड र ईट प झशन बदलत, loff_t हणज ल ग ऑफस ट. ssize_t (*read) (struct file *, char user *, size_t, loff_t *); ह फ शन ड ह ईस कड न ड ट घ त न व परत त जर य ठक ण क ह च ड ट नस ल तर त EINVAL हणज च इ ह ल ड अ य म ट हण न एरर दश वत. int (*open) (struct inode *, struct file *); ड ह ईस ओपन करण ह ड ह ईस फ ईल वर क ल ज ण र प हल य. struct module *owner ह आप य म य ल ल प ट करत आ ण जर आपल म य ल क मत अस ल तर त क ढ न ट क य स तब ध करत. बय चद य स THIS_MODULE ह न व र हत य च ड फन शन <linux/module.h> म य असत. ओपन म थड : ओपन म थड प ढ ल क म करत : ड ह ईस तय र आह क न ह त प हण आ ण य नगड त क ह एरस आह त क त प हण. जर ड ह ईस थमच ओपन ह ट अह ल तर य च इ न शयल यझ शन करण. f_op प टर अपड ट करण. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 36
file->private_data म य ठ व य त य ण य ड ट चर स ठ र ख व ज ग क न य त त ठ वण. रल ज म थड: रल ज म थड प ढ ल क म करत : ओपन म थडन file->private_data म य ठ वल ल ज ग क ढ न घ ण. ड ह ईस ब द करण. र ड आ ण र ईट म थड: ssize_t read(struct file *filp, char user *buff, size_t count, loff_t *offp); ssize_t write(struct file *filp, const char user *buff,size_t count, loff_t *offp); य त flip ह फ ईलच प टर असत. count हणज सफर करण य ड ट च स ईझ. buff हणज य जरच बफर य त र ड आ ण र ईट करत न ड ट ठ वल ज त. offp [ल ग ऑफस ट ट ईप प टर] य जर व पर त असण य फ ईलच प झशन दश वत. रटन ह य ssize_t हणज च signed size type. ह अ धक प ट ह य स ठ प ढ ल आक त पह : : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 37
[Ref:Linux Device Driver Book] र ड आ ण र ईट म थड स ठ नयम: जर रटन स य ह फ शन मध ल count य अ क इतक अस ल तर ततक ब ई स प ठवल ज त त. ज त रटन स य ह प झ ट ह अस ल आ ण count प कम अस ल तर ततक च ड ट प ठवल ज त जर रटन स य ह श य अस ल तर फ ईल स पल अस म नल ज त. नग ट ह रटन स य हणज एरर य च न बर <linux/errno.h>य फ ईल म य असत य त EINTR [interrupt system call],-efault [bad address]य च सम व श ह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 38
ड ह ईस य हरच ब सक स र श. य य जर फ श स कन ल फ श स म य ल ल ड करण. [load] insmod module_init() ड ह ईस उघडण. [open] fopen file_operations:open ड ह ईस मध न व चण.[close] fread file_operations:read ड ह ईस म य लहण.[read] fwrite file_operations:write ड ह ईस ब द करण.[write] fclose file_operations:release म य ल क ढ न ट कण.[remove] rmmod module_exit() [Ref:FreeSoftwareMagazine] : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 39
लन स ड ह ईस य हर मर ठ त न :भ ग ८ :प. स. आय. ड ह ईस य हर ब सक. आप य स गणक त फ स क ड,ल न क ड स रख ड ह ईस ज ड य स ठ [PCI] प. स. आय. बस च व पर ह त ह ड ट बस स उथ बस न तर न थ ज व र स प य [ स सर] ल ज डल ज त. अश त ह न आपण ड कट पवर हड ओ प हत असत न क व स ह र वर ड ट प ठवत असत न आप य नकळत आपण प. स. आय. बस व परत च असत. य च ड ट सफर प ड फ रच ज त असत.PCIe च ड ट सफर र ट २५० एम ब प र ल न आ ण ज त तज त ८ ज ब पय त आह. प स आय हणज प रफ रल क प न ट इ टरकन ट. य च PCI,PCI Express,PCI Extender,Mini PCI अस अन क क र आह त. प. स. आय. ड ह ईस च ल क र ट २५ क व ३३ Hz पय त असत. आपण आप य य भ ग त प. स. आय. ड ह ईस य हर कस असत य च म हत घ व य. प. स. आय. ड ह ईस ह आप य ह डर आय ड, ड ह ईस आय ड आ ण ल स क ड य व र ओळखल ज त.आप य स टमम य क णक णत प. स. आय. ड ह ईस आह त ह प ह य स ठ प ढ ल कम ड व पर व. lspci य त आपणस ज प हल न बर दसत त आह प. स. आय. बस न बर नत र प. स. आय. ड ह ईस न बर आ ण श वटच न बर फ शन दश वत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 40
lspci t य कम डन आपणस आपल प. स. आय. ड ह ईस ह चर म य दसत ल. य य ड ह ईस य हर स ठ ब ग च गरज नसत.य त pci_dev ह ड ट चर व परत त. प.स.आय. ड ह ईस म य त न अ स य रजन असत त. 1) क फगर शन प स, 2) इनप स आउटप ट प ट 3) ड ह ईस म मर. क फगर शन प स एकव ळ ल एक च ल ट वर क म क शकत आ ण इनप स आउटप ट प ट, ड ह ईस म मर ल क शन ह एक च प.स.आय. बस मध ल सव ड ह ईस श अर करत त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 41
क फगर शन प स मध ल र ज टर वर क म कर य स ठ कन ल च व श ट फ श स क म करत त. य क प स आय ल ट म य ४ इ टर ट प स असत त.य त ल क णत ह एक पन एक व ळ स.प.य. व र व परल ज ऊ शकत. स ट म ब ट ह त न प स आय ड ह ईस च फम व अर ह ड व अर इ न शयल ईझ क न य क रजन व गव ग य अ सल ज डल ज त,आ ण य अ सल च ल रजन ज डल आह त क फगर शन प समध न व चल ज ऊ शकत हण न ड ह ईस य हरल ड ह ईस व पर य स ठ श यत ब गच गरज भ सत न ह. [न द :य एस ब ड ह ईस य हरल ड ह ईस व पर य स ठ ब गच ल गत.] ज ह प.स.आय. ड ह ईस ल प वर द य वर ह ड व अर प ण त च ल नसत फ त क फगर शन नगड त क म ल र प स द त.फम व अर प स आय क लर मध ल र ज ट र मध ल ड ट ल र ड र ईट क न क फगर शन अ स पय त प हचत.ब ट ह त न फम व अर सव प स आय ड ह ईस बर बर य क अ स रजन ल ज ग मळव न द त आ ण त ह च ड ह ईस य हर ह ड ह ईसच म मर रजन आ ण आय ओ रजन य च ज डण प हत, प स आय क फगर शन र ज ट र ह ख ल ल म ण असत त: : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 42
[REF:Essential linux Device Driver-Alan Cox-Pearson] इनप ट आउटप ट रजन म य र ज टर असत त तर म मर रजन म य ड ट, ह डओ क ड म य इनप ट आउटप ट प स म य क ल र ज टर आ ण म मर रजन म बफर ल ज डल ल असत. ड यर ट म मर अ स स :[DMA] ड ह ईसल म मर स.प.य. न व परत ड यर ट ज डण य स ड यर ट म मर अ स स हणत त.य म ळ स सरच व पर न करत आपण म मर मध ल ड ट हलव शकत.स उथ ज मध ल ड.एम.ए क लर क व ख प.स.आय. बस स बसच त ब घ व न ड यर ट म मर सफर क शकत. स ट म मध ल ड ट एल.स.ड. न वर प ठव य स ठ य जर आपल प सलच ड ट ड एम ए असल य म बफर म य लहत आ ण एल.स.ड क लर ह च ड ट व ळ व ळ कल ट क न न वर द खवत. स ट म मध ल य म मर प सल ड.एम.ए बफर हणत त. म य ल ड ह ईस ट बल: pci_device_id ह ड ट चर य जरल व पर य स द ऊन ह ट लग स वध द त य त तस च म य ल ल ड करण य स टमल ह ह समजत क क ण य ह ड व अरल क णत म य ल क म करत. MODULE_DEVICE_TABLE(pci, i810_ids); वर ल फ शन ल कल ह रएबल तय र क न त pci_device_id ड ट चर ल प ट करत तस च य म य ल श नगड त म य स श धल ज त त व modules.pcimap म य ट कल ज त त. य न तर नव न ड ह ईस ह ट लग क य वर ह ट लग स टम modules.pcimap य च व पर क न अन प य हर ल ड करत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 43
ब सक प.स.आय. ड ह ईस य हर : थम ड ह ईस तय र कर व ल ग ल य स ठ ख ल ल क ड व पर व. ब सक प.स.आय. ड ह ईस य हर क ड: #include <linux/pci.h> आपण स ल गण र फ श स प.स.आय. ड ट एच य फ ईल मध न घ तल ज त त. #define MY_VENDOR_ID 0xABCD #define MY_DEVICE_ID_NET 0xEF01 य हर सप ट करत असण र ड ह ईस च न द य थ क ल ज त थम ड ह ईस तय र कर व ल ग ल य स ठ ख ल ल क ड व पर व struct pci_device_id network_driver_pci_table[] devinitdata = MY_VENDOR_ID, /* Interface chip manufacturer ID */ MY_DEVICE_ID_NET, /* Device ID for the network */ PCI_ANY_ID, /* Subvendor ID wild card */ PCI_ANY_ID, /* Subdevice ID wild card */ 0, 0, /* class and classmask are unspecified */ network_driver_private_data, 0, ; वर ल क ड म य प स आय य हरश नगड त ड ट दल ज त. struct pci_driver network_pci_driver =.name = "ntwrk", /* Unique name */.probe = net_driver_probe,.remove = devexit_p(net_driver_remove),.id_table = network_driver_pci_table, /* suspend() and resume() optional methods*/ ; य थ आप य ड ह ईस य हर च ब सक फ श स डफ ईन क ल ज त त.य त ड ह ईस य हर च न व ज डण आ ण क ढण य स ब धत फ शन आ ण आय ड ट बल य च सम व श ह त. static int init network_driver_init(void) pci_register_driver(&network_pci_driver); return 0; य थ आपण य हर इ न शयल ईझ क ल आह.य त प स आय य हर र ज टर क ल. Static void exit network_driver_exit(void) pci_unregister_driver(&network_pci_driver); य थ आपण य हर कड न ट क य वर अन र ज टर फ शन डफ ईन क ल आह. module_init(network_driver_init); module_exit(network_driver_exit); MODULE_DEVICE_TABLE(pci, network_driver_pci_table); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 44
ब ग फ शनम य प ढ ल क म क ल ज त त.: प स आय ड ह ईस एन बल करण. रस स च म हत श धण :इनप ट आउटप ट बस अ स,इ ट र व ट. य हर श नगड त ड ट चर न म न दल ज त. वत ल र ज टर करण. प स आय ड ह ईस य हरच क ह मह व च क डच प ट : #include <linux/pci.h> struct pci_dev; struct pci_driver; struct pci_device_id; int pci_register_driver(struct pci_driver *drv); int pci_module_init(struct pci_driver *drv); void pci_unregister_driver(struct pci_driver *drv); int pci_enable_device(struct pci_dev *dev); int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val); int pci_read_config_word(struct pci_dev *dev, int where, u16 *val); int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val); int pci_write_config_byte (struct pci_dev *dev, int where, u8 *val); int pci_write_config_word (struct pci_dev *dev, int where, u16 *val); int pci_write_config_dword (struct pci_dev *dev, int where, u32 *val); pci_resource_start() pci_resource_len() pci_resource_end() ह ह डर प स आय स ब धत र ज टर आ ण आय ड स ठ सप ट करत. य चरम य कन ल मध ल प स आय ड ह ईस दश वत ह चर प स आय ड ह ईस य हर दश वत. आप य य हरल सप ट करण र प स आय ड ह ईस च म हत द त प स आय ड ह ईस ह प स आय क अर ल र ज टर करत. म य ल इ न शय ट करत. य हर अन ल ड करत आ ण य हरल ज डल ल प स आय ड ह ईस कड न ट कत. ब फ शन म य ह फ शन व परत त. ड ह ईस च ल ह ऊन इ ट व इनप ट,आउटप ट रजन न म न दल ज त. क फगर शन प स मध ल ड ट वर क म कर य स ठ ह फ श स व परत त. ह फ श स अ तग त pci_bus ह बसश नगड त फ श स व परत त.फ श स मध ल श द च अथ : ८ ब ट ड ट सफर = byte १६ ब ट ड ट सफर = word ३२ ब ट ड ट सफर = dword प स आय क फगर शन प समध न व च य स ठ = read प स आय क फगर शन प स म य लह य स ठ = write क फगर शन प स य स रव त प स नच ऑफस ट = where एरर क ड रटन करण र स य = val प स आय ड ह ईस प टर = dev ह फ श स इनप ट आउटप ट व म मर रजन वर क म करत त. प ढ ल फ श स अन म अश म हत मळवत त: : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 45
pci_resource_flags() ब स अ स,ल थ, श वटच अ स,क ल ल ग य भ ग त आपण प स आय ड ह ईस स ठ ब सक य हर कस लह व त प हल त. प स आय च ऑपर टर स ट म म य च लण र क ड प ढ ल ल क शन ल मळ ल: drivers/net/, drivers/scsi/, drivers/video/ लन स स ट म म य प स आय ड ह ईस य हरच म हत मळव य स ठ ल क शन : Documentation/pci.txt प स आय ह इ टरफ स मदर ब ड ल कन ट ड असत य म ळ आपणस य व र आपन स फ स क ड न टवक क ड य स र य ड ह ईसस ठ य हर ल हत य त. प ढ ल भ ग त आपण य एस ब स ठ ड ह ईस य हर लहण र आह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 46
लन स ड ह ईस य हर मर ठ त न :भ ग ९:य. एस. ब. ड ह ईस य हर ब सक क स ट. आपण प न ई ह, म उस, क ब ड,ह ड फ न इ य द अन क ड ह ईस आप य स गणक स ज ड य स ठ य.एस ब प ट व परत.य प ट व र आपण आप य स सर श स भ षण कर त असत.ह अन क ड ह ईस य.एस.ब.[य न हस ल स रयल बस] य बसच व पर क न सर यल प त न ड ट सफर करत त. [य.एस.ब. २.० आ ण ३.० ब ल ज ऊन घ य स ठ य थ टचक म र ] म ग ल भ ग त आपण कर टर आ ण प स आय स ठ च ड ह ईस य हर प हल त य भ ग त आपण क ह तर म त शकण र आह त एकदम ल ई ह ड ह ईस य हर... य.एस.ब ड ह ईस य हरच रचन : य.एस.ब ह ट क लर ह म ख असत आ ण त य क य.एस.ब ड ह ईसल क ह ड ट स ड कर य स आह क त वच रत. क णत ह य.एस.ब ड ह ईस ह ह ट क लरल वच र य शव य ड ट सफर क शकत न ह. स ट म म य य एस ब ह ट स ठ य एस ब ह ट क लर य हर तर य एस ब ड ह ईस स ठ य एस ब ल इ ट य हर असत. य एस ब क अर ह य द घ न ह ल गण र ट नस आ ण चर प रवत. य एस ब क अर ह य हर स ट मच क अर वभ ग आह. कन लच ह पर ड khubd ह सव प ट वर ल ठ ऊन क ण य प ट वर क य बदल झ ल ल आह त य च म हत घ त असत. य जर प स मध न य एस ब ड ह ईस ल अ स स कर य स ठ य एस ब फ ईल स ट म usbfs ह व परत त. य जर /dev,/sys मध न ह य एस ब ड ह ईस ब ल क ह म हत घ व शकत. य स बध स प ण म हत दश वण र ख ल ल आक त पह व. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 47
य.एस.ब बस च क ह फ चस : हड ओ आ ण ऑड ओ ड ट प ठव य स ठ ड ह ईस क ह फ स ब ड व थ म गव शकत.तस च य एस ब ट क ल म य ज क मन जनरल ड ह ईस असत त य स ठ क ह ख स य हर लह यच गरज नसत उद : क ब ड,म उस,न टवक ड ह ईस क ह ख स ड ह ईस स ठ आपणस ख स य हर लह व ल गत. लन स स ट म ह द न क र य य एस ब य हर ल सप ट करत. एक ज स टम म य असत [य एस ब ड ह ईस य हर] द सर ज ड ह ईस म य असत [य एस ब ग ज टस य हर] आत आप य य ग स ठ एक प न ई ह य आ ण त आप य स गणक ल ज ड. आप य स ट मल ज डल ल य एस ब ड ह ईस ऑपर ट ग स टमल कळल क न ह त प ह य स ठ lsusb कम ड ट म नस म य व पर व.आत त ह ल प न ई हच ए झ ल ल दस ल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 48
आप य प न ई ह स ब धत सव म हत प ह य स ठ lsusb v ह कम ड व पर व.य त आप य प न ई ह च उ प दक य च न व य च आय ड ड ट च न व आ ण य च आय ड अश म हत मळ ल.म य प न ई ह च ह डर आय ड आ ण ड ट आय ड 0x0781,0x5567 अस मळ ल.य च व पर आपण य हर लह य स करण र आह त. [न द :य म हत त D= ड ह ईस,C=क फगर शन,I=इ टरफ स E =ए डप ट य च स दभ प ढ य ण रच आह.] : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 49
आत आपण आपल प हल ब सक य एस ब य हर लह य : #include <linux/module.h> #include <linux/kernel.h> #include <linux/usb.h> static int pen_probe(struct usb_interface *interface, const struct usb_device_id *id) printk (KERN_INFO "Pen drive(%04x:%04x) plugged\n", id->idvendor, id- >idproduct); return 0; static void pen_disconnect(struct usb_interface *interface) printk(kern_info "PEN drive removed \n"); static struct usb_device_id pen_table[]= USB_DEVICE(0x0781,0x5567), ; MODULE_DEVICE_TABLE (usb, pen_table); static struct usb_driver pen_driver =.name = "pen_driver",.id_table = pen_table,.probe = pen_probe,.disconnect = pen_disconnect, ; static int init pen_init(void) return usb_register(&pen_driver); static void exit pen_exit(void) usb_deregister(&pen_driver); module_init(pen_init); module_exit(pen_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR ("MJ"); MODULE_DESCRIPTION("USB PEN REGISTRATION DRIVER"); य च चर कर टर ड ह ईस य हर स रख च आह य त ड ह ईस फ ईल मध न र ज टर क व अन र ज टर न करत आपण ह ड व अर व परण र आह त. य स ठ usb_register आ ण usb_deregister ह य एस ब च API व परल ल आह त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 50
य त ब आ ण ड सकन ट स बत स प ड आ ण र य म ह फ श स पण गरज पड य स व प शकत य म ळ ज ह नक अस ल त ह आपल ड ह ईस स प ड म ड म य ज ईल आ ण परत हव अस ल त ह र य म ह ईल. ड ह ईस ऑट म टक डट ट ह य स ठ ड ह ईस ट बल तय र क न य त आप य ड ह ईसच आय ड प स क ल आह त य म ळ आपल ड ह ईस ज डल क ह य हर आप आप च ल ह ईल.य एस ब ड ह ईस स ठ य ट बल म य प हल प र म टर ह usb ह प स कर व ल गत. य न तर आपण आप य ड ह ईस आय ड ट बलच न व प स क शकत. प न ई ह लग क य वर ब फ शन च ल ह इल आ ण प न ई ह क ढ न ट क य वर ड कन ट फ शन रन ह ईल. ह म रन कर य स ठ थम य मस ठ म क फ ईल तय र कर व. न तर make कम ड व प न क प ईल क न.ko फ ईल तय र करण. lsmod व प न आपल नव न म य ल ल ड करण. पण य आध आप य स ट म म य आध प स नच असल ल य एस ब च म य ल [usbstorage] कड न ट क व ल ग ल य स ठ rmmod usb-storage ह कम ड व प न त म य ल स ट म मध न क ढ न ट क व. आत आपल प न ई ह कन ट कर व. आ ण dmesg कम ड रन कर व. न तर प न ई ह क ढ न ट क व आ ण परत dmesg कम ड रन कर व. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 51
आपणस आपल ब आ ण ड सकन ट ह द ह फ श स रन ह ऊन आउटप ट आल ल दस ल.आत आपणस खर म त क म करण र य हर तय र क य च मज न क च आल अस ल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 52
य.एस.ब ड ह ईस य हरच रचन : वर ल च त य एस ब य हर ह कन ल च स टम आ ण ह ड व अर म य असत. य एस ब क अर ह य एस ब य हरल ह ड व अर व पर य स ठ ए स स द त. य एस ब चर ब ल आपणस म हत प ढ ल ल क वर मळ ल: www.usb.org : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 53
य एस ब य हर ह स प ण य एस ब ड ह ईस ल ज डल न ज त फ त य एस ब इ टरफ सल ज डल ज त त. य एस ब ऐ डप ट आत[IN endpoint] क व ब ह र [out endpoint] ड ट सफर कर यस ठ व परत त. ह ड ट सफर एक च दश न प ईप म फ त ह त. य एस ब ऐ डप टच च र क र पडत त: क ल: ड ह ईस क फगर क रण स ठ व ड ह ईसच म हत मळव य स ठ तस च कम ड प ठव न ड ह ईसच ट स प ह य स ठ.श यत ड ह ईसम य endpoint 0 ह ह क म प र पडत.ह एकम व ए डप ट आह ज द ह दश न ड ट प ठवत. इ ट:ह ऐ डप ट थ ड च ड ट क ह ठर वक अ तर न प ठव य स ह त ह म य न ड ट प ठव न म उस कब ड स रख ड ह ईस क ल कर य तव व परत त. ब क:ह ऐ डप ट फ रच ज त ड ट सफर कर य स ठ व परत त. ज त ड ट क ण य ह ड ट च ल ट न ह त व गरज पड य स ज त व ळ घ ऊन ड ट प ठव य स ठ ह ऐ डप ट व परत त. टर,न टवक क ड य स ठ ह ऐ डप ट व परत त. आयस नस:ह ऐ डप ट ऑड ओ हड ओ ड ह ईस म य ज त ड ट प ठव य स ठ ह त य त ड ट ल ट च पव न करत सतत ड ट च व ह च ल ठ वल ज त. इ ट व आयस नस ऐ डप ट ह क ह ठर वक व ळ ल ड ट प ठव य स ठ सतत स ट क ल ज त त य एस ब ऐ डप ट ह struct usb_host_endpoint य चर म य ठ वल ज त त व य ऐ डप ट च म हत struct usb_endpoint_descriptor म य स ठवल ज त. य त ल क ह मह व च फ चस : bendpointaddress :ह ड ट इनप ट असण र क आउटप ट ह स गत य व न ड ट स टम ल ज ण र क ड ह ईस ल ज ण र त समजत. bmattributes :य व र ऐ डप ट ह क ल,ब क,इ ट, आयस नस य प क क णत आह त समजत. wmaxpacketsize :य म ळ ऐ डप ट व र ज त त ज त कत स ईझ ह त ळल ज ऊ शकत त समजत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 54
binterval :य म ळ इ ट र व ट च व ळ समजत. ऐ डप टह एक तपण इ टरफ सम य ग ड ळल ल असत त. ड ह ईस एक च व ळ अन क इ टरफ स व प शकत त य एस ब इ टरफ सल आप य न हम य स ट ग सह आणख ह क ह स ट ज अस शकत त थम इ टरफ स ह थ मक स ट स व परत त क ह व ळ द स य प त न क ल कर य स ठ अ टरन ट ह सट ग व परत. य च म हत usb_interface य चरम य ठ वल ज त. ह इ टरफ स क फगर शन य प त ग ड ळल ल असत त. स र श न क फगर शन हणज ड ह ईसच फ ईल,इ टरफ स ह ड ह ईसच फ श स,ए ड प ट हणज ड ट सफर करण र प ईप. ड ह ईसल एक क व अन क क फगर शन असत त. क फगर शनम य एक क व अन क इ टरफ स असत त. इ टरफ सम य एक क व अन क स ट ज असत त. इ टरफ सम य एक क व अन क ए डप ट असत त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 55
य एस ब ड ह ईस न बर: प हल य एस ब ड ह ईस ह टहब असत य स य एस ब क अर न एक न बर दल ल आह य न तर य त त प ट न बर य प ट ल ड ह ईस ज डल आह त प ट. य न तर क फगर शन न बर आ ण न तर इ टरफ स न बर उद त प ढ ल म ण दश वत त : 2-1:1.0 य एस ब अ स :[USB Urbs] कन ल ह य एस ब ड ह ईस स बत य एस ब र व ट ल क य व र स भ षण करत. य एस ब अ स ह ए ड प ट स बत ड ट प ठव य स ठ आ ण घ य स ठ व परत त. य आर ब प ढ ल म ण क म करत त: य एस ब ड ह ईस य हर य आर ब तय र करत त. य एस ब ड ह ईसल ए डप ट न मल ज त. य आर ब ह ड ह ईस य हरच व पर क न य एस ब क अर म य न द क ल ज त य न तर य एस ब क अर य च न द य एस ब ह ट क लर य हर म य करत य एस ब ह ट क लर ह स स क न य एस ब ड ट सफर करत. ज ह य आर ब प ण ह त य एस ब ह ट क लर ह य एस ब ड ह ईस य हरल य च न द प ठवत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 56
य एस ब इ फ म शन य हर: #include <linux/module.h> #include <linux/kernel.h> #include <linux/usb.h> static struct usb_device *device; static int pen_probe(struct usb_interface *interface, const struct usb_device_id *id) struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor *endpoint; int i; iface_desc = interface->cur_altsetting; printk (KERN_INFO "Pen i/f %d now probed:(%04x:%04x)\n",iface_desc- >desc.binterfacenumber, id->idvendor, id->idproduct); printk(kern_info "ID->bNumEndpoints: %02X\n",iface_desc- >desc.bnumendpoints); printk(kern_info "ID->bInterfaceclass: %02X\n", iface_desc- >desc.binterfaceclass); for(i=0; i < iface_desc->desc.bnumendpoints; i++) endpoint = &iface_desc->endpoint[i].desc; printk(kern_info "ED[%d]->bEndpointAddress: 0x%02X\n",i, endpoint->bendpointaddress); printk(kern_info "ED[%d]->bmAttributes: 0x%02X\n", i, endpoint- >bmattributes); printk(kern_info "ED[%d]->wMaxPacketSize: 0x%04X (%d)\n",i, endpoint->wmaxpacketsize, endpoint-> wmaxpacketsize); device = interface_to_usbdev(interface); return 0; static void pen_disconnect(struct usb_interface *interface) printk(kern_info "Pen i/f %d now disconnected \n",interface- >cur_altsetting->desc.binterfacenumber); static struct usb_device_id pen_table[]= USB_DEVICE(0x0781,0x5567), ; MODULE_DEVICE_TABLE (usb, pen_table); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 57
static struct usb_driver pen_driver =.name = "pen_driver",.id_table = pen_table,.probe = pen_probe,.disconnect = pen_disconnect, ; static int init pen_init(void) return usb_register(&pen_driver); static void exit pen_exit(void) usb_deregister(&pen_driver); module_init(pen_init); module_exit(pen_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR ("MJ"); MODULE_DESCRIPTION("USB PEN Info DRIVER"); वर ल म म य struct usb_interface ह ह ड ल व न आपण स हव त म हत घ तल आह ब आ ण ड स कन ट ह स त इ टरफ सस ठ रन ह त त आ ण त च य च प हल प र म टर असत त. आ ण क ट नर ड ह ईस ह ड ल हण न interface_to_usbdev ह फ शन व परत त. ह म रन क य वर आपणस आप य ड ह ईस स ब धत सव डट ल म हत उपल द ह ईल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 58
लन स ड ह ईस य हर मर ठ त न :भ ग १०: य. एस. ब. ड ह ईस य हर फ ईल ऑपर श स. य. एस. ब. ड ह ईस य हरह प स आय ड ह ईस य हर स रख च ल हल ज त. ब फ शन न ० रटन क ल हणज आपल ड ह ईस यश व पण र ज टर झ ल आ ण आ ण एरर क ड रटन क ल हणज ड ह ईस र ज टर झ ल न ह.म य ल ड ह ईस ट बल ह आपल ड ह ईस ऑट म टक डट ट व ल ड ह य स व परत त य त module.usbmap,madule.pcimap य य एस ब आ ण प स आय स ठ तय र ह ण य म प फ ई स आह त. ड ट सफर : आप य प न ई ह मध न ड ट सफर कर य स ठ य हर म डफ य क य. प न ई ह म य र ड आ ण र ईट ऑपर शन कर य स ठ pen_read आ ण pen_write ह द न फ श स व परल ल आह त.य त ड ट सफर कर य स ठ usb_bulk_msg()ह ब क ड ट सफर स म थड ब क ए ड प ट च व पर क न ड ट सफर कर ल. प ढ ल क ड आपणस च ल ब सक र ड र ईट फ चस प रवण र क टम य हर कस तय र कर यच त दश व ल. य एस ब म य ड ट सफर य द न प त आह त,एक प त य आर ब व परत द स य प त त य जरल य आर ब व पर य च गरज भ सत न ह क रण य आर ब आप आप फ श स य अ तग त स ट क ल ज त. आत आपण य आर ब कस व पर व त प हण र आह त. य आर ब च व पर क न: य आर ब तय र क न अल क ट करण : य त थम य आर ब तय र क न अल क ट क ल ज त. struct urb *usb_alloc_urb(int iso_packets, int mem_flags); य फ शन म य iso_packets ह प र म टर कत आयस स नस प क स प ठव यच य च स य द त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 59
जर आपण ड ट सफर स ठ आयस स नस म थड व परत नस तर ह ह ह य ० ह द त त. mem_flags ह ल ग kmalloc फ शन ल प ठवत त तस च ल ग आह य आर ब स मट करण. int usb_submit_urb(struct urb *urb, int mem_flags); य त आपणस ज य आर ब आप य ड ह ईस ल प ठव यच आह य च प टर व ल ग प ठवल ज त. प ढ ल त न प क एक ल ग प स क ल ज त. GFP_ATOMIC=क लर ह य आर ब ल क ह ल करत अस ल, current->state ह TASK_RUNNING ट ट नस ल त ह. GFP_NOIO = ल क आय ओ प च म य अस ल आ ण ट र ज ड ह ईस य एरर ह ल ग य भ ग त. GFP_KERNEL = अ यथ ब य डफ ट. य आर ब र करण. int usb_kill_urb(struct urb *urb); int usb_unlink_urb(struct urb *urb); usb_kill_urb य त य आर ब ब द ह ऊन ड ह ईस ड स कन ट ह त. usb_unlink_urb य त य एस ब क अर ल य आर ब ब द कर य स ठ स चन प ठवल ज त. य आर ब करण. आपल क म झ य वर य आर ब ह य एस ब क अर ल आपल क म झ ल आह अस स गत void usb_free_urb(struct urb *urb); य त आपणस ज य आर ब म कळ कर यच आह य च प टर प स क ल ज त. बफर तय र करण. usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 60
य फ शन च व पर क न आपण ड एम ए [ड यर ट म मर अ स स ]स ठ बफर तय र क शकत. य व र ड ट फ ट प ठवल ज त. ड ट सफर : void usb_fill_int_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context, int interval); void usb_fill_bulk_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context); void usb_fill_control_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, unsigned char *setup_packet, void *transfer_buffer, int buffer_ length, usb_complete_t complete, void *context); य आर ब चर च व पर क न य एस ब क अर म य य आर ब स मट कर य स ठ. इ ट,ब क,क ल य न स र फ शन सल ट कर व. य आर ब च व पर न करत स ध ड ट सफर. int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout); int usb_control_msg(struct usb_device *dev, unsigned int pipe, u8 request, u8 requesttype, u16 value, u16 index, void *data, u16 size, int timeout); ब क म स ज फ शन क ल म स ज फ शन. वर ल फ श स ह वत य आर ब स ब ध ऑपर शन करत त.य जर ल व परत य ण र स प ड ट सफर फ शन वर दल आह त.ज अ तग त ब क ग ट च क ळज वत घ त. struct usb_device *usb_dev : य ल ड ट प ठव यच आह त ड ह ईस unsigned int pipe :स ड क व रस ह ए ड प ट उद : usb_sndbulkpipe, usb_rcvbulkpipe. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 61
void *data :प ठव य क व घ त य ज ण य ड ट च प टर int len :ड ट बफरच ल थ int *actual_length : न क कत ड ट प ठवण र आह य च स य. int timeout :व ट प ह य च व ळ. u8 request, u8 requesttype, u16 value, u16 index, void *data, u16 size : य य एस ब म स ज य क ल म स जस ठ य ह य आह त आपण आप य ममध ल र ड फ शन प ह य. static ssize_t pen_read(struct file *f,char user *buf, size_t cnt, loff_t *ppos) int retval; int read_cnt; retval = usb_bulk_msg(device,usb_rcvbulkpipe(device,bulk_ep_in),bulk_buf, MAX_PKT_SIZE, &read_cnt,5000); if(retval) printk(kern_err "Bulk message returned %d \n", retval); return retval; if (copy_to_user(buf, bulk_buf, MIN(cnt, read_cnt))) return -EFAULT; return MIN(cnt, read_cnt); य त usb_bulk_msg फ शन ल य एस ब ड ट ब क म थडन र स ह कर य स ठ प र म टर प ठवल आह त. जर रटन ह य प झ ट ह अस ल तर रटन ह य इतक म स ज व चल ग ल अस ल. त य जर ल उपल ध क न द य स ठ copy_to_user य फ शन च व पर क न त य जर य बफर म य ल हल ज त. तस च र ईट फ शन म य थम य जर य बफर मध ल ड ट copy_from_user य फ शन च व पर क न ब क बफर म य घ तल ज त आ ण usb_bulk_msg फ शन ल sndbulkpipe व प न ड ट ड ह ईस म य लहल ज त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 62
#include <linux/module.h> #include <linux/kernel.h> #include <linux/usb.h> #define MIN(a,b) (((a) <= (b))? (a) : (b)) #define BULK_EP_OUT 0x01 #define BULK_EP_IN 0x82 #define MAX_PKT_SIZE 512 static struct usb_device *device; static struct usb_class_driver class; static unsigned char bulk_buf[max_pkt_size]; static int pen_open(struct inode *i, struct file *f) return 0; static int pen_close(struct inode *i,struct file *f) return 0; static ssize_t pen_read(struct file *f,char user *buf, size_t cnt, loff_t *ppos) int retval; int read_cnt; retval = usb_bulk_msg(device,usb_rcvbulkpipe(device,bulk_ep_in),bulk_buf, MAX_PKT_SIZE, &read_cnt,5000); if(retval) printk(kern_err "Bulk message returned %d \n", retval); return retval; if (copy_to_user(buf, bulk_buf, MIN(cnt, read_cnt))) return -EFAULT; return MIN(cnt, read_cnt); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 63
static ssize_t pen_write(struct file *f, const char user *buf, size_t cnt,loff_t *ppos) int retval; int wrote_cnt =MIN(cnt,MAX_PKT_SIZE); if(copy_from_user(bulk_buf, buf, MIN(cnt,MAX_PKT_SIZE))) return -EFAULT; /*write data in to bulk endpoint */ retval =usb_bulk_msg(device,usb_sndbulkpipe(device, BULK_EP_OUT),bulk_buf,MIN(cnt,MAX_PKT_SIZE), &wrote_cnt,5000);; if(retval) printk(kern_err "Bulk message returned %d\n", retval); return retval; return wrote_cnt; static struct file_operations fops =.open = pen_open,.release =pen_close,.read =pen_read,.write =pen_write, ; static int pen_probe(struct usb_interface *interface, const struct usb_device_id *id) int retval; device = interface_to_usbdev (interface); class.name = "usb/pen%d"; class.fops = &fops; if ((retval =usb_register_dev(interface, &class )) < 0) err("not abe to get a minor for this device"); else printk(kern_info "Minor obtained : %d \n", interface->minor); return retval; static void pen_disconnect(struct usb_interface *interface) usb_deregister_dev(interface, &class); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 64
static struct usb_device_id pen_table[]= USB_DEVICE(0x0781,0x5567), ; MODULE_DEVICE_TABLE (usb, pen_table); static struct usb_driver pen_driver =.name = "pen_driver",.id_table = pen_table,.probe = pen_probe,.disconnect = pen_disconnect, ; static int init pen_init(void) int result; if(( result = usb_register (&pen_driver))) err("usb_register failed.err no %d", result); return result; static void exit pen_exit(void) usb_deregister(&pen_driver); module_init(pen_init); module_exit(pen_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR ("MJ"); MODULE_DESCRIPTION("USB PEN Device DRIVER"); ह म रन क य वर आ ण प न ई ह लग क य स /dev/pen0ह तय र झ ल अस ल. आपण /dev/pen0 य वर क ह स ध र ड र ईट ऑपर शन क शकत आ ण प न ई ह क ढ न ट क य स /dev/pen0 नघ न ज ईल. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 65
[ न द: म रन कर य आध usb-storeage ई हर रम ह क ल प हज. ] य एस ब ड ह ईस य हरच क ह मह व च क डच प ट : #include <linux/pci.h> ह ह डर य एस ब स ब धत सव म हत व फ श स स ठ सप ट करत. struct usb_driver; य चरम य य एस ब ड ह ईस दश वत struct pci_driver; ह चर प स आय ड ह ईस य हर दश वत. struct usb_device_id; आप य य हरल सप ट करण र य एस ब ड ह ईस च म हत द त int usb_register(struct usb_driver *d); य एस ब ड ह ईस ह य एस ब क अर ल struct usb_class_driver; struct urb; struct urb *usb_alloc_urb(int iso_packets, int mem_flags); void usb_free_urb(struct urb *urb); र ज टर करत. म जर न बर व प न क य नक शन करण र य एस ब ड ह ईस स ठ य एस ब ड ट प ठव य स ठ च चर य एस ब,य आर ब चर तय र कर य स ठ क व क ढ न ट क य स ठ : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 66
int usb_submit_urb(struct urb *urb, int य एस ब ड ट स मशन च ल क व ब द mem_flags); int usb_kill_urb(struct urb *urb); कर य स ठ int usb_unlink_urb(struct urb *urb); usb_[rcv snd][ctrl int bulk isoc]pipe() प ईप तय र करण. usb_buffer_alloc() usb_buffer_free() usb_gadget_register_driver() ड यर ट म मर सफर स ठ बफर तय र करण. क म झ य वर बफर म कळ करण. ग ज ट ड ह ईस र ज टर करण. ग ज ट य हर: ए ब ड ड स ट म ज ह स गणक ल ज डल ज त, य व ळ लन स ह द ह वर रन ह त असत. त ह स गणक ह ह ट हण न क म करत तर ए ब ड ड ड ह ईस ह ग ज ट य हर वर क म करत. य त प ढ ल भ ग य त त. ग ज ट ड ह ईस[ ट र ज,न टवक ] ह ह ट कड न आल य र व ट ल उ तर द त त. जस प न ई ह वत ल आपण ट र ज ल स च आह य च म हत ह ट स गणक ल द त. drivers/usb/gadget/zero.c य ठक ण आपणस ग ज ट य हर ब सक चर क ड मळ ल. अ धक म हत स ठ : लन स स ट म म य य एस ब क ल टन क ड : o य एस ब ड य म ट: drivers/usb/usb-skeleton.c o Documentation/usb/ इ टरन ट स स ल क: o www.usb.org/developers/docs. o www.linux-usb.org. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 67
लन स ड ह ईस य हर मर ठ त न :भ ग ११:स प ण य. एस. ब. ड ह ईस य हर म. लन स म य क ह य हर च क ड ह थ मक स य त ब ध न ठ वल आह त य च व पर आपण आपल क ड लह य स क शकत हणज च ज ह आपण नव न य एस ब ड ह ईस स ठ य हर लहण र अस त ह आपण श य प स न च ल न करत ड यर ट ह क ड र फर स ध न य त स ध रण क न आपण आपल ड ह ईस य हर लह शकत. अश य हर ल क ल टन य हर हणत त.त य एस ब क ल टन, मबफर क ल टन अस व गव गळ क ल टन य हर आप य लन स य य हर फ डर म य आपण स आढळ न य त त. य भ ग त आपण य एस ब क ल टन य हर प हण र आह त य त आपण य क ओळ च अथ प ह य आ ण प ण य हर समज व न घ व य. [न द:य आध पण य एस ब ड ह ईस य हरच आध च भ ग व चण गरज च आह ] तर आप य स ट म म य ह य हर drivers/usb/usb-skeleton.c य ल क शन ल आढळत आपण य य हर च २.२ ह ह ज न प ह य. य त म म जस आह तस ठ व न य क ओळ च अथ मर ठ त स प क न स गतल आह य च व पर आपणस क ड म य च ज स कर य स ठ ह इल.व आपणस प ण म समजल ज ईल. #include <linux/kernel.h> //कन ल ह डर printk स रख फ शन रन ह य स ठ #include <linux/errno.h> //एररच क ड य त असत #include <linux/init.h> // स स इ न शयल यझ शन #include <linux/slab.h> //kmalloc फ शन च लव य स ठ #include <linux/module.h> // ड ह ईस य हर लह य स ठ,म य सश नगड त ऑपर श स #include <linux/kref.h> //URB च र फर स क कर य स ठ #include <linux/uaccess.h> //user to/from ह फ शन व पर य स ठ #include <linux/usb.h> //य एस ब श नगड त फ श स #include <linux/mutex.h>// य य अल स म फ र ल क स ट कर य स ठ //आपण य ड ह ईस स ठ य हर ल हण र आह त य ड ह ईस च ड ट न बर आ ण ह डर न बर //ख ल डफ ईन क ल ज त. /* Define these values to match your devices */ #define USB_SKEL_VENDOR_ID 0xfff0 #define USB_SKEL_PRODUCT_ID 0xfff0 : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 68
// ड ह ईस ट बल म य आपल ड ह ईस र ज टर क ल ज त ज ण क न ज ह य ह डर आय ड //आ ण ड ट आय ड च ड ह ईस स ट मल ज डल ज ईल त ह आपल य हर आप आप डट ट ह ऊन ल ड ह इल. /* table of devices that work with this driver */ static const struct usb_device_id skel_table[] = USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID), /* Terminating entry */ ; MODULE_DEVICE_TABLE(usb, skel_table); //य थ आपण आप य ट बलच न व आ ण य एस ब ह प र म टर द त. /* Get a minor range for your devices from the usb maintainer */ #define USB_SKEL_MINOR_BASE 192 //य जर य र फर स स ठ म यनर न बर. /* our private defines. if this grows any larger, use your own.h file */ #define MAX_TRANSFER (PAGE_SIZE - 512) // ज त त ज त कत ड ट प ठवल ज ईल. /* MAX_TRANSFER is chosen so that the VM is not stressed by allocations > PAGE_SIZE and the number of packets in a page is an integer 512 is the largest possible packet on EHCI */ #define WRITES_IN_FLIGHT 8 /* arbitrarily chosen */ //ह ड ह ईस य हर चर आह,य त य हर य सव पट डफ ईन क य आह त. /* Structure to hold all of our device specific stuff */ struct usb_skel struct usb_device *udev; /* the usb device for this device */ struct usb_interface *interface; /* the interface for this device */ struct semaphore limit_sem; /* limiting the number of writes in progress */ struct usb_anchor submitted; /* in case we need to retract our submissions */ struct urb *bulk_in_urb; /* the urb to read data with */ unsigned char *bulk_in_buffer; /* the buffer to receive data */ size_t bulk_in_size; /* the size of the receive buffer */ size_t bulk_in_filled; /* number of bytes in the buffer */ size_t bulk_in_copied; /* already copied to user space */ u8 bulk_in_endpointaddr; /* the address of the bulk in endpoint */ u8 bulk_out_endpointaddr; /* the address of the bulk out endpoint */ int errors; /* the last request tanked */ bool ongoing_read; /* a read is going on */ bool processed_urb; /* indicates we haven't processed the urb */ spinlock_t err_lock; /* lock for errors */ struct kref kref; struct mutex io_mutex; /* synchronize I/O with disconnect */ struct completion bulk_in_completion; /* to wait for an ongoing read */ ; #define to_skel_dev(d) container_of(d, struct usb_skel, kref) static struct usb_driver skel_driver; static void skel_draw_down(struct usb_skel *dev); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 69
//प ढ ल फ शन ह य हर क ढ न ट क य वर सव ग ट ल न कर य स ठ व परत त. static void skel_delete(struct kref *kref) struct usb_skel *dev = to_skel_dev(kref); usb_free_urb(dev->bulk_in_urb); //य आर ब म कळ क ल ज त. usb_put_dev(dev->udev); // ड ह ईस क टर एक न कम करत. kfree(dev->bulk_in_buffer); //बरफ क ल ज त. kfree(dev); // ड ह ईस ह त. //ह फ शन ड ह ईस ओपन झ य वर रन ह त. static int skel_open(struct inode *inode, struct file *file) struct usb_skel *dev; // ड ह ईस प टर struct usb_interface *interface; //इ टरफ स प टर int subminor; int retval = 0; subminor = iminor(inode); श धण. interface = usb_find_interface(&skel_driver, subminor);//य एस ब मध ल इ टरफ स if (!interface) pr_err("%s - error, can't find device for minor %d\n", func, subminor); retval = -ENODEV; goto exit; dev = usb_get_intfdata(interface); //इ टरफ स च ड ट ट अर करण. if (!dev) retval = -ENODEV; goto exit; /* increment our usage count for the device */ kref_get(&dev->kref); // ड ह ईस च कत व ळ व परल य च न द करण. /* lock the device to allow correctly handling errors * in resumption */ mutex_lock(&dev->io_mutex); // य ट स ल क ल वण. retval = usb_autopm_get_interface(interface); // ड ह ईसच ओट स प ड ड म ड च ल करण. if (retval) goto out_err; /* save our object in the file's private structure */ file->private_data = dev; //फ ईल य य ह ट ड ट म य इ टरफ सच म हत भरण. mutex_unlock(&dev->io_mutex);//ल क क ढ न घ ण. exit: : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 70
return retval; // ड ह ईस म कळ करण. static int skel_release(struct inode *inode, struct file *file) struct usb_skel *dev; dev = file->private_data; // य ह ट ड ट स ह करण. if (dev == NULL) return -ENODEV; करण. /* allow the device to be autosuspended */ mutex_lock(&dev->io_mutex); //ल क करण. if (dev->interface) usb_autopm_put_interface(dev->interface); // ड ह ईसच ओट स प ड ड म ड च ल mutex_unlock(&dev->io_mutex); //ल क क ढ न घ ण. /* decrement the count on our device */ kref_put(&dev->kref, skel_delete); // ड ह ईसच न बर एक न कम करण. return 0; //य फ शन च व पर आप य म म य आल य च क व चण,सव एरर फ ग रस ट करण आ ण ड ह ईस ओपन क य न तर म मर व छ करण. static int skel_flush(struct file *file, fl_owner_t id) struct usb_skel *dev; int res; dev = file->private_data; if (dev == NULL) return -ENODEV; /* wait for io to stop */ mutex_lock(&dev->io_mutex); // य ट स ल क करण. skel_draw_down(dev); /* read out errors, leave subsequent opens a clean slate */ spin_lock_irq(&dev->err_lock); // पन ल क स ट करण. res = dev->errors? (dev->errors == -EPIPE? -EPIPE : -EIO) : 0; dev->errors = 0; //च क व च न घ ण. spin_unlock_irq(&dev->err_lock); // पन ल क क ढ न ट कण. mutex_unlock(&dev->io_mutex); // य ट स अलल क करण. return res; //आपल ड ट यव थतपण व चल ग ल आह क न ह य च पडत ळण. static void skel_read_bulk_callback(struct urb *urb) struct usb_skel *dev; dev = urb->context; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 71
spin_lock(&dev->err_lock); /* sync/async unlink faults aren't errors */ if (urb->status) if (!(urb->status == -ENOENT urb->status == -ECONNRESET urb->status == -ESHUTDOWN)) dev_err(&dev->interface->dev, "%s - nonzero write bulk status received: %d\n", func, urb->status); dev->errors = urb->status; //च क झ ल आह. else dev->bulk_in_filled = urb->actual_length; //ड ट यव थतपण प हचल आह. dev->ongoing_read = 0; spin_unlock(&dev->err_lock); complete(&dev->bulk_in_completion); //क ल ट स स झ ल आह. //ड ट व च य स ठ तय र ह ण., य आर ब स ट ग करण. static int skel_do_read_io(struct usb_skel *dev, size_t count) int rv; /* prepare a read */ //य आर ब म य ड ट भ न घ ण. usb_fill_bulk_urb(dev->bulk_in_urb, dev->udev, usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointaddr), dev->bulk_in_buffer, min(dev->bulk_in_size, count), skel_read_bulk_callback, dev); /* tell everybody to leave the URB alone */ spin_lock_irq(&dev->err_lock); dev->ongoing_read = 1; spin_unlock_irq(&dev->err_lock); /* do it */ //य आर ब स मत करण.ब क ए ड प टल ड ट प ठवण. rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL); if (rv < 0) dev_err(&dev->interface->dev, "%s - failed submitting read urb, error %d\n", func, rv); dev->bulk_in_filled = 0; rv = (rv == -ENOMEM)? rv : -EIO; spin_lock_irq(&dev->err_lock); dev->ongoing_read = 0; spin_unlock_irq(&dev->err_lock); return rv; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 72
//ड ट व चण. static ssize_t skel_read(struct file *file, char *buffer, size_t count, loff_t *ppos) struct usb_skel *dev; int rv; bool ongoing_io; dev = file->private_data; /* if we cannot read at all, return EOF */ if (!dev->bulk_in_urb!count) return 0; /* no concurrent readers */ rv = mutex_lock_interruptible(&dev->io_mutex); if (rv < 0) return rv; if (!dev->interface) /* disconnect() was called */ rv = -ENODEV; goto exit; /* if IO is under way, we must not touch things */ retry: spin_lock_irq(&dev->err_lock); ongoing_io = dev->ongoing_read; //इनप ट आउटप ट स स प ण ह ऊ द ण. spin_unlock_irq(&dev->err_lock); if (ongoing_io) /* nonblocking IO shall not wait */ if (file->f_flags & O_NONBLOCK) rv = -EAGAIN; goto exit; /* * IO may take forever * hence wait in an interruptible state */ rv = wait_for_completion_interruptible(&dev->bulk_in_completion); if (rv < 0) goto exit; /* * by waiting we also semiprocessed the urb * we must finish now */ dev->bulk_in_copied = 0; dev->processed_urb = 1; if (!dev->processed_urb) /* * the URB hasn't been processed * do it now */ wait_for_completion(&dev->bulk_in_completion); dev->bulk_in_copied = 0; dev->processed_urb = 1; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 73
/* errors must be reported */ rv = dev->errors; if (rv < 0) /* any error is reported once */ dev->errors = 0; /* to preserve notifications about reset */ rv = (rv == -EPIPE)? rv : -EIO; /* no data to deliver */ dev->bulk_in_filled = 0; /* report it */ goto exit; /* * if the buffer is filled we may satisfy the read * else we need to start IO */ if (dev->bulk_in_filled) /* we had read data */ size_t available = dev->bulk_in_filled - dev->bulk_in_copied; size_t chunk = min(available, count); if (!available) /* * all data has been used * actual IO needs to be done */ rv = skel_do_read_io(dev, count); //ड ट व चण. if (rv < 0) goto exit; else goto retry; /* * data is available * chunk tells us how much shall be copied */ if (copy_to_user(buffer, dev->bulk_in_buffer + dev->bulk_in_copied, chunk)) //ड ट य जर म मर बरफ म य स ठवण. rv = -EFAULT; else rv = chunk; dev->bulk_in_copied += chunk; /* * if we are asked for more than we have, * we start IO but don't wait */ if (available < count) skel_do_read_io(dev, count - chunk); else /* no data in the buffer */ rv = skel_do_read_io(dev, count); if (rv < 0) goto exit; else if (!(file->f_flags & O_NONBLOCK)) goto retry; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 74
exit: rv = -EAGAIN; mutex_unlock(&dev->io_mutex); return rv; //आपल ड ट यव थतपण ल हल ग ल आह क न ह य च पडत ळण. static void skel_write_bulk_callback(struct urb *urb) struct usb_skel *dev; dev = urb->context; //एरर आल आह क न ह त च क करण. /* sync/async unlink faults aren't errors */ if (urb->status) if (!(urb->status == -ENOENT urb->status == -ECONNRESET urb->status == -ESHUTDOWN)) dev_err(&dev->interface->dev, "%s - nonzero write bulk status received: %d\n", func, urb->status); spin_lock(&dev->err_lock); dev->errors = urb->status; spin_unlock(&dev->err_lock); //क म झ य वर DMA बफर क न द ण. /* free up our allocated buffer */ usb_free_coherent(urb->dev, urb->transfer_buffer_length, urb->transfer_buffer, urb->transfer_dma); up(&dev->limit_sem); \\ड ट ल हण. static ssize_t skel_write(struct file *file, const char *user_buffer, size_t count, loff_t *ppos) struct usb_skel *dev; int retval = 0; struct urb *urb = NULL; char *buf = NULL; size_t writesize = min(count, (size_t)max_transfer);//ड ट च स य आ ण ज त त ज त ड ट सफर कर य च मत य प क लह न स य नवडण. dev = file->private_data; /* verify that we actually have some data to write */ if (count == 0) //ड ट आह क न ह त प हण. goto exit; /* * limit the number of URBs in flight to stop a user from using up all * RAM */ if (!(file->f_flags & O_NONBLOCK)) if (down_interruptible(&dev->limit_sem)) retval = -ERESTARTSYS; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 75
goto exit; else if (down_trylock(&dev->limit_sem)) retval = -EAGAIN; goto exit; spin_lock_irq(&dev->err_lock); retval = dev->errors; if (retval < 0) /* any error is reported once */ dev->errors = 0; /* to preserve notifications about reset */ retval = (retval == -EPIPE)? retval : -EIO; spin_unlock_irq(&dev->err_lock); if (retval < 0) goto error; /* create a urb, and a buffer for it, and copy the data to the urb */ urb = usb_alloc_urb(0, GFP_KERNEL);//य आर ब तय र करण आ ण य स म मर द ण. if (!urb) retval = -ENOMEM; goto error; buf = usb_alloc_coherent(dev->udev, writesize, GFP_KERNEL, &urb->transfer_dma); //DMA व प न ड ट सफर करण. if (!buf) retval = -ENOMEM; goto error; //ड ट य जर बफर कड न ड ह ईस य हर बफर म य ल हण. if (copy_from_user(buf, user_buffer, writesize)) retval = -EFAULT; goto error; /* this lock makes sure we don't submit URBs to gone devices */ mutex_lock(&dev->io_mutex); if (!dev->interface) /* disconnect() was called */ mutex_unlock(&dev->io_mutex); retval = -ENODEV; goto error; //य आह ब स ट करण. /* initialize the urb properly */ usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointaddr), buf, writesize, skel_write_bulk_callback, dev); urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; usb_anchor_urb(urb, &dev->submitted); //ब क ए ड प टल ड ट प ठवण, /* send the data out the bulk port */ retval = usb_submit_urb(urb, GFP_KERNEL); mutex_unlock(&dev->io_mutex); if (retval) dev_err(&dev->interface->dev, : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 76
"%s - failed submitting write urb, error %d\n", func, retval); goto error_unanchor; /* * release our reference to this urb, the USB core will eventually free * it entirely */ usb_free_urb(urb); //य आर ब म कळ करण. return writesize; error_unanchor: usb_unanchor_urb(urb); error: if (urb) usb_free_coherent(dev->udev, writesize, buf, urb->transfer_dma); usb_free_urb(urb);//एरर आ य स बफर व य आर ब ल न करण. up(&dev->limit_sem); exit: return retval; // ड ह ईसच सव फ ईल ऑपर शन य थ डफ ईन क ल आह त. वर दल ल सव फ श स य थ ड ल अर क ल आह त. static const struct file_operations skel_fops =.owner = THIS_MODULE,.read = skel_read,.write = skel_write,.open = skel_open,.release = skel_release,.flush = skel_flush,.llseek = noop_llseek, ; /* * usb class driver info in order to get a minor number from the usb core, * and to have the device registered with the driver core */ //य एस ब ल स ड फन शन- क ल टन च न व आ ण फ ईल ऑपर शन च प इ टर डफ ईन क ल आह. static struct usb_class_driver skel_class =.name = "skel%d",.fops = &skel_fops,.minor_base = USB_SKEL_MINOR_BASE, ; // ब फ शन ड फन शन static int skel_probe(struct usb_interface *interface, const struct usb_device_id *id) struct usb_skel *dev; struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor *endpoint; size_t buffer_size; int i; int retval = -ENOMEM; : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 77
/* allocate memory for our device state and initialize it */ dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) dev_err(&interface->dev, "Out of memory\n"); goto error; kref_init(&dev->kref); sema_init(&dev->limit_sem, WRITES_IN_FLIGHT); mutex_init(&dev->io_mutex); spin_lock_init(&dev->err_lock); init_usb_anchor(&dev->submitted); init_completion(&dev->bulk_in_completion); dev->udev = usb_get_dev(interface_to_usbdev(interface)); dev->interface = interface; /* set up the endpoint information */ /* use only the first bulk-in and bulk-out endpoints */ //इन आ ण आउट ए ड प ट स ध ण र फ शन iface_desc = interface->cur_altsetting; for (i = 0; i < iface_desc->desc.bnumendpoints; ++i) endpoint = &iface_desc->endpoint[i].desc; if (!dev->bulk_in_endpointaddr && usb_endpoint_is_bulk_in(endpoint)) /* we found a bulk in endpoint */ buffer_size = usb_endpoint_maxp(endpoint); dev->bulk_in_size = buffer_size; dev->bulk_in_endpointaddr = endpoint->bendpointaddress; dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); if (!dev->bulk_in_buffer) dev_err(&interface->dev, "Could not allocate bulk_in_buffer\n"); goto error; dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL); if (!dev->bulk_in_urb) dev_err(&interface->dev, "Could not allocate bulk_in_urb\n"); goto error; if (!dev->bulk_out_endpointaddr && usb_endpoint_is_bulk_out(endpoint)) /* we found a bulk out endpoint */ dev->bulk_out_endpointaddr = endpoint->bendpointaddress; if (!(dev->bulk_in_endpointaddr && dev->bulk_out_endpointaddr)) dev_err(&interface->dev, "Could not find both bulk-in and bulk-out endpoints\n"); goto error; /* save our data pointer in this interface device */ usb_set_intfdata(interface, dev); /* we can register the device now, as it is ready */ retval = usb_register_dev(interface, &skel_class); if (retval) : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 78
/* something prevented us from registering this driver */ dev_err(&interface->dev, "Not able to get a minor for this device.\n"); usb_set_intfdata(interface, NULL); goto error; error: /* let the user know what node this device is now attached to */ dev_info(&interface->dev, "USB Skeleton device now attached to USBSkel-%d", interface->minor); return 0; if (dev) /* this frees allocated memory */ kref_put(&dev->kref, skel_delete); return retval; //प न ई ह क ढ न ट क य वर रन ह ण र फ शन //य त ड ह ईस ड र ज टर क न म मर क ल ज त. static void skel_disconnect(struct usb_interface *interface) struct usb_skel *dev; int minor = interface->minor; dev = usb_get_intfdata(interface); usb_set_intfdata(interface, NULL); /* give back our minor */ usb_deregister_dev(interface, &skel_class); /* prevent more I/O from starting */ mutex_lock(&dev->io_mutex); dev->interface = NULL; mutex_unlock(&dev->io_mutex); usb_kill_anchored_urbs(&dev->submitted); /* decrement our usage count */ kref_put(&dev->kref, skel_delete); dev_info(&interface->dev, "USB Skeleton #%d now disconnected", minor); //ट यमर क उ टर फ शन static void skel_draw_down(struct usb_skel *dev) int time; time = usb_wait_anchor_empty_timeout(&dev->submitted, 1000); if (!time) usb_kill_anchored_urbs(&dev->submitted); usb_kill_urb(dev->bulk_in_urb); // ड ह ईस थ य व ळ न तर ब द क ल ज त व ड ह ईस व परल ज त नसत न य च प वर व चवल ज त. static int skel_suspend(struct usb_interface *intf, pm_message_t message) struct usb_skel *dev = usb_get_intfdata(intf); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 79
if (!dev) return 0; skel_draw_down(dev); return 0; // ड ह ईस ल ग ल त ह त परत र य म करण. static int skel_resume(struct usb_interface *intf) return 0; // ड ह ईस र स ट कर य आध य च ट ट स ह क न ठ वण र फ शन. static int skel_pre_reset(struct usb_interface *intf) struct usb_skel *dev = usb_get_intfdata(intf); mutex_lock(&dev->io_mutex); skel_draw_down(dev); return 0; // ड ह ईस र स ट ह ऊन परत आ य वर य स य च प व च ट ट द य स दभ त ह फ शन व परल ज त. static int skel_post_reset(struct usb_interface *intf) struct usb_skel *dev = usb_get_intfdata(intf); /* we are sure no URBs are active - no locking needed */ dev->errors = -EPIPE; mutex_unlock(&dev->io_mutex); return 0; //य एस ब ड ह ईस य हर ड फन शन static struct usb_driver skel_driver =.name = "skeleton",.probe = skel_probe,.disconnect = skel_disconnect,.suspend = skel_suspend,.resume = skel_resume,.pre_reset = skel_pre_reset,.post_reset = skel_post_reset,.id_table = skel_table,.supports_autosuspend = 1, ; module_usb_driver(skel_driver); MODULE_LICENSE("GPL"); : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 80
लन स ड ह ईस य हर मर ठ त न :भ ग १२ : ड ह ईस य हर ल क: स म फ स, य ट स ल क, पन ल क. आप य स गणक त एक च व ळ अन क स स च ल असत त,ब य चद अन क ड एक च म मर वर क म करत असत त अश व ळ जर य च म न जर यव थतपण झ ल न ह तर य ड म य ग त ह ऊन आपल स ट म ह ग क व श ह ऊ शकत.एख द म मर इतर क ण ह व परत न ह ह प ह न व परण व वत त म मर व पर त असत न त ल क क न ठ वण य स ल क ग क व य य अल ए ल जन हणत त. ल क ग च द न म ख क र पडत त:स म फ स आ ण पन ल क. सम फ स :ह ल क एकच व ळ फ त एक ल च एख द रस स व प द त य स ल प ग ल क अस ह हणत त. आपण ज ह ल क करण र आह त त ह down() ह कम ड द ण आपल ड ट वर न क म क न घ ण आ ण क म झ य वर up() ह कम ड व प न स म फ र ल क मध न ब ह र पडण.आ ण प ढ ल क ण ल त रस स ख ल क न द ण. एख य स सल एख द रस स हव अस ल आ ण त रस स जर द स य स स न ल क क ल अस ल तर तर त स स वत ल ल प म ड म य ट कत आ ण ज ह हव असल ल रस स म कळ ह ईल त ह त स स ल प मध न ज ग ह त आ ण स म फ र व प न य रस स च क ल वत य त य त घ त. य स म फ र च प शल ट ईप हणज य ट स:ह ब यनर म ड[०/१] म य क म करत अस न य त द नच ट ट [ल क /अनल क] मध ल ऑपर शन च लत त. हणज च ह एक व ळ फ त एक च ट क ल क क शकत पण स म फ र ह एकव ळ अन क ट क ह डल क शकत त. थम ह य ट स इ न शयल ईझ कर व ल गत. static DECLARE_MUTEX(my_lock); न तर त down कम ड व प न ल क क न घ ण. ड ऊन ह फ शन स म फ रच ह य एक न कम करत. down(&my_lock); य न तर आपल रस स वर ल क म क न घ ण. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 81
न तर up कम ड व प न ल क रल ज करण. up(&my_lock); पन ल क: सम फ स ह एक च व ळ एख य रस स वर क म करण य स स प स न रस स च बच व करत त तर पन ल क ह ल प ग ल क न ह त तर त आप य ट कल स शन म मर ल इतर म कड न ह ण य ह त प प स न बच वत त.जर एख य फ शन ल जर ल क मळत नस ल तर त तथ च व ट प हत बस न र हत. य त स सर च NOP न ऑपर शन ह कम ड रन ह त र हत. य व ळ स स सर ब क क म म रत न ह हण न पन ल कच व ळ कम तकम ठ व व.य म ळ पन ल क करत न च बर च ब ल ट ळत य त त. कन ल म य बर चद पन ल क ह च व परल असत.जस क इ ट ह डलर स र य म म य ह म त परफ म स द त. य त जर द स य फ शन न ल क मळवल ल अस ल तर क ड एक ल प म य ज त य त त सतत ल क म कळ झ ल क न ह त प हत र हत य स पन हणत त. य ल कच म ट स सर स ट मम य फ र उपय ग ह त. पन ल क च फ श स <linux/spinlock.h>य फ ईल म य डफ ईन क ल ल असत त. पन ल क ड ल अर प ढ ल म ण करत त. struct spinlock my_lock; spin_lock_init(&my_spin_lock); पन ल क ह प ढ ल फ श स व प न घ तल ज त. spin_lock(&my_lock); आ ण प ढ ल फ शन व प न क ढ न घ तल ज त. spin_unlock(&my_lock); द स य स स म य रन ह ण य इ ट प स न आप य ड ट च बच व कर य स ठ आपण पन ल क व प शकत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 82
लन स ड ह ईस य हर मर ठ त न :भ ग १३: ड ल ड ह ईस य हर ब सक. ह डओ ड ह ईस ह ड ल वर द खव य स ठ ह य अल आउटप ट ड ट तय र करत त. लन स ह डओ स ट म ह म बफर ल यस तय र क न द ऊन ह ड व अर च ज स वर डप ड बल नसण र स ट म स वध तय र क न द त. हड ओ फ स क ड च ह ड व अर ह व गव ग य क रच असत. य म ल आपणस व गव गळ क ड ग कर व ल ग शकत ह ल म ट ळ य स ठ लन स म य म बफर च ल यर तय र क ल ज त. य च व पर क न अ लक शनम य क णत ह बदल न करत अ लक श स व गव ग य ह ड व अर वर च ल शकत.आपण व पर त असल ल क ह व ब ऊजर, हड ओ ल यस अश अ लक श स ड यर ट मबफर व प न फ स ह ड व अरश ड ट सफर ऑपर शन करत त. म बफर क स ट: ख ल ल च त द खव य म ण म ह ल यर क मन म बफर ए. प. आय. च व पर क न व गव य हड ओ क ड बर बर ड ट सफर करत त.य व न आपण स म बफर च फ यद क य आह त समजल अस लच.x-windows स रख क ह अ लक श स APIच व पर न करत ड यर ट ह ड व अर श स भ षण स ध शकत त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 83
आप य ट म नस व ड म य आपण fbset ह कम ड दल असत त आप य मबफर य हर म फ त ड ल च स ट ज आपण स पह वय स मळत ल.य त रझ य शन, व स,ट य म ग, ह ट कल स क,ह र झ टल स क य च स व तर म हत मळ ल. म बफर API: म बफर API च व पर करत न क ह म य ड ट चर म हत असण गरज च आह त प ढ ल म ण : 1) struct fb_var_screeninfo.:य चर म य ड ल न च क ह बदलत य ण य ग ट ठ वल य असत त उद : रझ य शन,म ज न ह स ट ज मर बदल शकत. 2) struct fb_fix_screeninfo :य ड ट चर म य हड ओ ह ड व अर च फ स म हत ठ वल ल असत जस क मबफर म मर च स ईझ, ट ट ग च अ स. 3) fb_cmap :ह चर म बफरच कलर म प ठरवत.य जर य म फ त र ड, ल, न [RGB]य कलस य स य ठरव शकत. तस च य त सपर स स ट कर य च ह स वध आह. मबफर य हर: आपण आप य ड ल बर बर मबफर य हर न स भ षण करण र आह त य त आपण म बफर म मर ल क शन बर बर इ टरअ ट करण हणज ड ल वर दसण य क ट ट म य बदल घडवण क रण य च मबफर म म र त ल ड ट ह आपण स नवर दसत असत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 84
ड ट चस : struct fb_info :ह मबफर ड ह ईस य हर मध ल म ख ड ट चर आह.ह चर include/linux/fb.h य थ डफ ईन क ल ल असत. struct fb_info /*... */ struct fb_var_screeninfo var; /* Variable screen information. struct fb_fix_screeninfo fix; /* Fixed screen information. /*... */ struct fb_cmap cmap; /* Color map. /*... */ struct fb_ops *fbops; /* Driver operations. /*... */ char iomem *screen_base; /* Frame buffer's virtual address */ unsigned long screen_size; /* Frame buffer's size */ /*... */ /* From here on everything is device dependent */ void *par; /* Private area */ ; वर ल चर म य आपण शकल ल न फ स इ फ, न ह रएबल इ फ,कलर म प ह ड ट चर डफ ईन क ल आह त तस च फ ईल ऑपर शन स ठ व पर य त य ण र fb_ops ह चर स आह. क न बफर च स ईझ आ ण ब स अ स डफ ईन क ल आह त. य त आप य ड ह ईसश नगड त असल ल ड ट ह par य प टरम य ठ वल ल असत. framebuffer_alloc() ह म थड व प न fb_info स ठ म मर अल क ट क ल ज त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 85
fb_ops ह चर: fb_ops ह चर ह म बरफ य हरस ठ ए प ट द त त.प हल क ह फ शन ह य हर फ शन रन ह य स ज र असत त तर क ह ऑ शनल असत त ह फ शन फ सश स ब धत असत त.fb_ops य च चर प ढ ल म ण आह. struct fb_ops struct module *owner; /* य हर ओपन करण */ int (*fb_open)(struct fb_info *info, int user); /* य हर क ज करण */ int (*fb_release)(struct fb_info *info, int user); /* ह रएबल न इ फ व प न ड ह ईसच प र म टर यव थ त आह त क न ह त त च क करण.*/ int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info); /* हड ओ क लर च र ज ट र स ट करण */ int (*fb_set_par)(struct fb_info *info); /* कलर र ज टर प र म टर स ट करण. */ int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info); /* ड ल ल क करण */ int (*fb_blank)(int blank, struct fb_info *info); /* प ढ ल म थड य फ स क ड च व पर करत त. */ /* र टअ गल च क न ए रय ह प स लन भ न घ त. */ void (*fb_fillrect)(struct fb_info *info,const struct fb_fillrect *rect); /* च क न च क ह भ ग एक भ ग कड न द सर कड क प कर य स ठ */ void (*fb_copyarea)(struct fb_info *info,const struct fb_copyarea *region); /* ड ल वर च क ढ य स ठ */ void (*fb_imageblit)(struct fb_info *info,const struct fb_image *image); /* ड ल र ट ट कर य स ठ */ void (*fb_rotate)(struct fb_info *info, int angle); /* ड ह ईसश स ब धत आय ओ सल ट इ टरफ स कम ड */ int (*fb_ioctl)(struct fb_info *info, unsigned int cmd, unsigned long arg); /*... */ : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 86
प र म टर च क आ ण स ट करण : fb_check_var() : ह म थड ड ह ईस वर ब सक च क ऑपर शन करत त रझ य शन ब ट पर प स ल य ह य च क करत RGB फ म ट स ट करत. fb_set_par(): ह म थड एल स ड क लर य र ज टर य स ट ग स ट करत.य त म ज न स ट ग य त.तस च size_reg म य र झ य शन स ट ग,आ ण DMA_REGम य ड.एम.ए. स ट क ल ज त, य च व पर ड यर ट म मर ए स स स ठ ह त. कलर म ड: स ड [psudo] कलर आ ण [true]कलर ह द न कर च कलर म ड आह त. प स ल ह य प कलर ह य ल इ ड स क ल असत आपण आप य म बफर म मर च ज ग व चव शकत. य स ठ आपणस आपल ह ड व अर कलर स ट [palette]ल सप ट द ण र हव. एल स ड म य १६ ब ट / प स ल आ ण RGB565 फ म ट व परत त य च अथ fb_check_var() फ शन ब ट ऑफस ट ह य र ड, न, य स ठ अन म ११,५,० अस घ त त. [०-५ (५): य,५-११(६): न,११-१६[५]:र ड] fb_set_par() फ श स अ फ ल ड ग च व पर क न प स ल ह य आ ण ब क उ ड ह म स करत.RGB न एनक ड गस ठ व परल ल ब ट ल थ [५+६+५=१६] य स कलर ड थ हणत त.य च व पर क न मबफर य हर आप य क य टर मध ल ब ट ल ग इम ज ड ल वर द खवत त. न ल क ग: fb_blank() ह फ शन ड ल ल क ग आ ण अन ल क गल सप ट करत. ह स वध प वर म न जम ट स ठ व परल ज त. आपल ड ल १० म नट स ठ ल क ठ व य स ठ setterm -blank 10 ह कम ड व पर व. ह कम ड CTRL_REG म य ल क ग स ठ च ह य स ट क न fb_blank() ह फ शन क ल करत.आ ण ड ल ल क करत. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 87
ए स ल र ट ड म थड: ए स ल र ट ड म थड य म थड हड ओ आ ण फ स च म ठ म ठ ऑपर श स कर य स ठ व परत त. स टम म य ड ल वर ल ड ग, च ग,ब ट म प म ह करण य स र य ग ट कर य स ठ फ स ह ड व अर असण गरज च आह.fb_ops य चर म य आपण ए स ल र ट ड म थड च ल ट प हल आह च. य म य फ स क ड च प शल स वध आ ण स ध रण च व पर क न अ धक च गल च नवर प हत य त. fb_imageblit() म थड ड ल वर इम ज तय र करत जर आप य स ट म म य फ स क ड नस ल तर फ म बफर य हर cfb_imageblit() ह य च म थड स ध फ शन रन करत. ह फ शन पण त च क म करत पण ह फ स ह ड व अर च प वर व पर त न ह.आप य नवर ब ट इम ज आणत न ह फ शन व परल ज त. fb_copyarea() ह फ शन नच क ह भ ग एक भ ग कड न द सर कड क प कर य स व परल ज त. fb_fillrect()ह फ शन क नच क ह भ ग प स ल र ष न भ र वल ज त. मबफर कड न ड यर ट म मर ए स स : DMA इ जन स ट म म मर व न मच ड ट घ व न स सर म फ त स स क न त फ स ड ट नवर द खवल ज त. ड ल य र श र ट वर DMA च र ट अवल ब न असत. मबफर क हर ट DMA अ स स र ख न ठ व य स ठ myfb_probe()फ शन म य dma_alloc_coherent()म थड व परल ज त. myfb_set_par() म थडन DMA च अ स क लर य DMA_REG य र ज ट र म य ल हल ज त. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 88
ज ह य हर myfb_enable_controller() फ शन व प न DMA च ल करत त ह क लर ड यर ट म मर अ स स च व पर क न प स ल ड ट मबफर कड न घ ऊन ड ल वर द खवत. क ट आ ण ईटन स : एल स ड क लर CONTRAST_REG र ज टर च व पर क न क ट क ल करत. स सर जनरल पप ज इ प ट आउटप ट ल ईन च व पर क न ईटन स क ल करत. backlight_device_register() य र ज टर च व पर क न ब क ल ईट क ल करत य त. ड ल य हरवर प ढ अ य स कर य स ठ प ढ ल ल कल भ ट य.: लन स मबफर ज ट च ल क: o www.linux-fbdev.org आप य लन स स टम मध ल मबफर य हर च ल क शन: o drivers/video/*fb.c मबफर क ल टन य हर: o drivers/video/*fb.c ड ल य हर स र श: कन ल इ टरफ स स ठ ल गण र ड ल ड ह ईस य हर च फ श स प ढ ल म ण : register_framebuffer() unregister_framebuffer() framebuffer_alloc() framebuffer_release() fb_alloc_cmap() fb_dealloc_cmap() dma_alloc_coherent() dma_free_coherent() मबफर ड ह ईस र ज टर करण. मबफर ड ह ईस म कळ करण. fb_info चर म ठ म मर अल क ट करण. अल क ट क ल ल म मर म कळ करण. कलर म प अल क ट करण. कलर म प म कळ करण DMA च म प ग क न म मर अल क ट करण. DMA बफर च म मर म कळ करण. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 89
लन स ड ह ईस य हर मर ठ त न :भ ग १४: ड ह ईस य हर ड बगर ट स. आपण आपल ड ह ईस य हर ल ड करत न क व व परत न स ट म श,एरर व ड क व क ह तर च क च उ तर मळत अस य स ड हलपस ल त स डव व ल गत. आप य ल आल ल प ल म क ठ न आल य च अ य स कर य स ठ ड बगर व परत त. पण म य अन भव न स र सव त च गल ड ब ग ग ट नक हणज printk फ शन.printk च क ळज प व क व पर आपणस ब य च ग ट च म हत दव शकत.. आपण म लहत न य क आउटप ट व स ट ज printk च व पर क न द श त क शकत व य ह ल च व पर क न न क क ठ न ल म आल त श ध शकत. तस च क म झ य वर अश स ग स ठ व परल ल printk कम स द ऊन लपव शकत. ड ब ग ग स ठ प ढ ल ट स उपल द आह त. ड ट ड ल ड बगर:ddd फकल ड ल ड बगर :gdb कन ल फकल ड ल ड बगर :kgdb वर ल ट स च व पर क न आपण अ धक च ग य क र ड ब ग ग क शकत पण ह ट स व पर य आध त क फगर कर य च गरज असत. ह ट स शक य च उ तम प त ह ज आप य स ट मवर ह ट स इ त ल कर यच आ ण गरज ल ग ल त ह ड ब ग ग ट ट कर यच. अश र त न आपण य भ ग पय त ब सक लन स ड ह ईस य हर ब ल य सव ब सक ग ट शकल आह त. ह प तक आप य ल लन स ड ह ईस य हर य ब सक ग ट स य आ ण स य भ ष त समज न घ य स न क च उपय ग पडल अस ल य त श क च न ह. आपणस ह प तक कस व टल य ब ल ऐक यल मल न क च आवड ल तस च आपणस क ह स ध रण स चव य य असत ल तर न क कळव. : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 90
स दभ : र फर स प तक : Jonathan Corbet,Alessandro Rubini and Greg Kroah-Hartman. Linux Device Drivers,3rd Edition, :O Relly publications, July 2009. Sreekrishanan Vekanteswaran. Essential Linux Device Drivers :Pearson Edition,2009. Jon Masters and Richard Blum. Professional Linux programming :Wiley India Edition,2007. John Muster. UNIX made easy,3rd Edition: New Delhi: Tata McGraw-Hill Edition,2002. म सक : Linux For You Magazine. Free Software Magazine म ग ग ईड: Detlef Fliegl.Programming Guide for Linux Device Drivers.https://usb.cs.tum.edu,2009. इ टरन ट ग ईड: ग गल, व कप डय, लन सश नगड त अन क व बस ईट, लन स क य नट...Finally..we can conclude the book with following line.. open source is the only right way to do software and best tool for doing the job. - --- Linus Torvalds : मह श ज धव : mahesh7197@gmail.com : www.bolmj.wordpress.com Page 91
मर ठ आव त ल खक:मह श स भ ज ज धव ल ग : www.bolmj.wordpress.com स पक : Email ID : mahesh7197@gmail.com BOLMJ मर ठ क शन आव त न आ ण त न आप य स ठ आप य भ ष त स प ण लन स ड ह ईस य हर मर ठ त न. लन स स रव त प स न त मर पय त. ड ह ईस य हर य क स ट स य भ ष त. मच सख ल म हत सव ट ससह म हत. सव म आउटप टच छ य च. Knowledge across the world should be Open to all, Free of cost, Easy to adopt and should available in our mother tongue. --BOLMJ