版权信息
Thisdocumentiscopyrighted(c)1997PeterBaumann,(c)2001GaryFrerkingandisdistributedunderthetermsoftheLinuxDocumentationProject(LDP)license,statedbelow.
Unlessotherwisestated,LinuxHOWTOdocumentsarecopyrightedbytheirrespectiveauthors.LinuxHOWTOdocumentsmaybereproducedanddistributedinwholeorinpart,inanymediumphysicalorelectronic,aslongasthiscopyrightnoticeisretainedonallcopies.Commercialredistributionisallowedandencouraged;however,theauthorwouldliketobenotifiedofanysuchdistributions.
LinuxSerial-Programming-HOWTO的版權(C)1997归PeterBaumann所有,(C)2001归GaryFrerking所有,并且以LDPlisence(附后)发布。
除非另做申明,LinuxHOWTO文件的版权归各自的作者所有。LinuxHOWTO文件可以完整或部份的以實物或電子版形式复制或者发布,只要能在所有的拷贝中保留版權申明即可。我们鼓励允许商業的发布,不過,如果以此形式发布的话,请告知作者。
Alltranslations,derivativeworks,oraggregateworksincorporatinganyLinuxHOWTOdocumentsmustbecoveredunderthiscopyrightnotice.Thatis,youmaynotproduceaderivativeworkfromaHOWTOandimposeadditionalrestrictionsonitsdistribution.Exceptionstotheserulesmaybegrantedundercertainconditions;pleasecontacttheLinuxHOWTOcoordinatorattheaddressgivenbelow.
Inshort,wewishtopromotedisseminationofthisinformationthroughasmanychannelsaspossible.However,wedowishtoretaincopyrightontheHOWTOdocuments,andwouldliketobenotifiedofanyplanstoredistributetheHOWTOs.
Ifyouhaveanyquestions,pleasecontact<>
所有的翻譯,以及其他派生的工作,或整合合併任何LinuxHOWTO文件都必須在此版權申明的規範下进行.也就是说,你不可以在从HOWTO所衍生的工作中,散佈的文件上附加額外的限制條款。除了這些規則,都可获得某種條件的授與;請见后面的地址来聯絡LinuxHOWTO協調員。
簡而言之,我們希望儘可能得透過各種渠道来促進這份资料的流通,不過,我们強烈希望將此版權宣告置於HOWTO的文件上,并且希望任何想重新发佈HOWTO的人可以通知我們一下。
如果你有問題,請通过email进行联系
.
申明
Noliabilityforthecontentsofthisdocumentscanbeaccepted.Usetheconcepts,examplesandothercontentatyourownrisk.Asthisisaneweditionofthisdocument,theremaybeerrorsandinaccuracies,thatmayofcoursebedamagingtoyoursystem.Proceedwithcaution,andalthoughthisishighlyunlikely,theauthor(s)donottakeanyresponsibilityforthat.
Allcopyrightsareheldbytheirbytheirrespectiveowners,unlessspecificallynotedotherwise.Useofaterminthisdocumentshouldnotberegardedasaffectingthevalidityofanytrademarkorservicemark.
Namingofparticularproductsorbrandsshouldnotbeseenasendorsements.
Youarestronglyrecommendedtotakeabackupofyoursystembeforemajorinstallationandbackupsatregularintervals.
使用本文的概念,例子及其他内容的风险由您自己承担,我们对此造成的后果不负责任。由于这是份新的文档,可能存在着错误或误差,而有可能导致对您的系统的损害。请小心操作,虽然这是几乎不可能发生的,作者不对此承担任何责任。
除非特别标注,所有的版权归其各自的作者。使用此文档不可标住任何商标或服务标记。
特定的产品或品牌的命名不可被理解为是认可的。(晕,这一段应该请律师来翻)。
强烈推荐您在重大的安装前备份系统,并且做到定期备份。
版本更新
Aspreviouslymentioned,notmuchisnewintermsoftechnicalcontentyet.
如前面所提到的,此版本在技术内容上较前一版本并没有什么大的更新。
感谢
TheoriginalauthorthankedMr.Strudthoff,MichaelCarter,PeterWaltenberg,AntoninoIanella,GregHankins,DavePfaltzgraff,SeanLincolne,MichaelWiedmann,andAdreyBonar.
原作者感谢Strudthoff,MichaelCarter,PeterWaltenberg,AntoninoIanella,GregHankins,DavePfaltzgraff,SeanLincolne,MichaelWiedmann,andAdreyBonar诸位先生。
意见反馈
Feedbackismostcertainlywelcomeforthisdocument.Withoutyoursubmissionsandinput,thisdocumentwouldn'texist.Pleasesendyouradditions,commentsandcriticismstothefollowingemailaddress:<>.
非常欢迎对此文档提出反馈意见。有任何补充,评论,批评请发信到:
入门
调试
ThebestwaytodebugyourcodeistosetupanotherLinuxbox,andconnectthetwocomputersviaanull-modemcable.Useminiterm(availablefromtheLDPprogrammersguide(ftp://sunsite.unc.edu/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar.gzintheexamplesdirectory)totransmitcharacterstoyourLinuxbox.Minitermcanbecompiledveryeasilyandwilltransmitallkeyboardinputrawovertheserialport.Onlythedefinestatement#defineMODEMDEVICE"/dev/ttyS0"hastobechecked.SetittottyS0forCOM1,ttyS1forCOM2,etc..Itisessentialfortesting,thatallcharactersaretransmittedraw(withoutoutputprocessing)overtheline.Totestyourconnection,startminitermonbothcomputersandjusttypeaway.Thecharactersinputononecomputershouldappearontheothercomputerandviceversa.Theinputwillnotbeechoedtotheattachedscreen.
调试代码最好的方法,是另外建立一台Linux主机(Linuxbox),采用非调制解调器的串口线(null-modem)连接两台机器。还可以使用minicom(可以从LDP编程指南上获得:ftp://sunsite.unc.edu/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar.gz里的examples目录)来传输字符到你的Linux主机。Miniterm很容易编译而且会直接把键盘的输入不做处理(raw方式)地传到串口。只需要把定义申明#defineMODEMDIVICE“/dev/ttyS0”改一下。COM1口就设置成ttyS0,COM2口就是ttyS1,以此类推…测试是必需的,所有的字符直接通过缆线传输,不进行任何输出处理。为了测试你的连接,在你的两台机器上开启minicom,然后随意输入一些字符。从一台电脑中输入的字符应该能显示在另一台设备上,反之亦然。输入的字符不会回显(echo)在本地的屏幕上.
Tomakeanull-modemcableyouhavetocrosstheTxD(transmit)andRxD(receive)lines.Foradescriptionofacableseesect.7oftheSerial-HOWTO.
自制非调制解调器的串口连接线(null-modemcable)时,你需要将一端的传送端(TxD)与另一端的接收端(RxD)连接,一端的接收端与另外一端的传送端连接,详情见Serial-HOWTO第七节。
Itisalsopossibletoperformthistestingwithonlyonecomputer,ifyouhavetwounusedserialports.Youcanthenruntwominitermsofftwovirtualconsoles.Ifyoufreeaserialportbydisconnectingthemouse,remembertoredirect/dev/mouseifitexists.Ifyouuseamultiportserialcard,besuretoconfigureitcorrectly.IhadmineconfiguredwrongandeverythingworkedfineaslongasIwastestingonlyonmycomputer.WhenIconnectedtoanothercomputer,theportstartedloosingcharacters.Executingtwoprogramsononecomputerjustisn'tfullyasynchronous.
如果你的电脑有两个空闲的串口端口的话,那么只要使用一台机器就可以做这些试验了,你可以在两个虚拟控制台上各运行一个miniterm,分别用来发送和接收结果。如果你使用串口鼠标,记得在试验前将/dev/mouse重定向。如果你使用多端口的串口卡(multiportserialcard),一定要确保此设备配置正确,我的电脑就曾因为配置错误,而出现这样的问题:当我在自己的机器上测试的时候一切正常,而连接到其他电脑上的时候,端口开始丢失数据。注意,在一台机器上运行两个串口应用程序,并不是完全异步的。
端口设置
Thedevices/dev/ttyS*areintendedtohookupterminalstoyourLinuxbox,andareconfiguredforthisuseafterstartup.Thishastobekeptinmindwhenprogrammingcommunicationwitharawdevice.E.g.theportsareconfiguredtoechocharacterssentfromthedevicebacktoit,whichnormallyhastobechangedfordatatransmission.
设备/dev/ttyS*会被当作连接到你的Linux机器的终端设备,而且在系统启动后就已经配置好了。這一点是在你寫raw设备的串口通信程式時必需牢記的.举例来说,這個串口被設定為回显(echo)所有自此设备送出的字符,通常在做数据传输时,需要改變這種工作模式。
Allparameterscanbeeasilyconfiguredfromwithinaprogram.Theconfigurationisstoredinastructurestructtermios,whichisdefinedin:
#defineNCCS19 structtermios{ tcflag_tc_iflag; /*inputmodeflags*/ tcflag_tc_oflag; /*outputmodeflags*/ tcflag_tc_cflag; /*controlmodeflags*/ tcflag_tc_lflag; /*localmodeflags*/ cc_tc_line; /*linediscipline*/ cc_tc_cc[NCCS]; /*controlcharacters*/ } |
所有的参数都可以在程序中轻松配置。配置保存在结构体structtermios中,这个结构是在中定义的
#defineNCCS19 structtermios{ tcflag_tc_iflag; /*输入模式标志*/ tcflag_tc_oflag; /*输出模式标志*/ tcflag_tc_cflag; /*控制模式标志*/ |