<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>嵌入式Linux的ARM移植實例研究

嵌入式Linux的ARM移植實例研究

2017-10-25 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

應用實例的編寫實際上已經不屬于Linux操作系統移植的范疇,但是為了保證本系列文章的完整性,這里提供一系列針對嵌入式Linux開發應用程序的實例。
  編寫Linux應用程序要用到如下工具:
 ?。?)編譯器:GCC
  GCC是Linux平臺下最重要的開發工具,它是GNU的C和C++編譯器,其基本用法為:gcc[options][filenames]。
  我們應該使用arm-linux-gcc。
 ?。?)調試器:GDB
  gdb是一個用來調試C和C++程序的強力調試器,我們能通過它進行一系列調試工作,包括設置斷點、觀查變量、單步等。
  我們應該使用arm-linux-gdb。
 ?。?)Make
  GNUMake的主要工作是讀進一個文本文件,稱為makefile。這個文件記錄了哪些文件由哪些文件產生,用什么命令來產生。Make依靠此makefile中的信息檢查磁盤上的文件,如果目的文件的創建或修改時間比它的一個依靠文件舊的話,make就執行相應的命令,以便更新目的文件。
  Makefile中的編譯規則要相應地使用arm-linux-版本。
 ?。?)代碼編輯
  可以使用傳統的vi編輯器,但最好采用emacs軟件,它具備語法高亮、版本控制等附帶功能。
  在宿主機上用上述工具完成應用程序的開發后,可以通過如下途徑將程序下載到目標板上運行:
 ?。?)通過串口通信協議rz將程序下載到目標板的文件系統中(感謝Linux提供了rz這樣的一個命令);
 ?。?)通過ftp通信協議從宿主機上的ftp目錄里將程序下載到目標板的文件系統中;
 ?。?)將程序拷入U盤,在目標機上mountU盤,運行U盤中的程序;
 ?。?)如果目標機Linux使用NFS文件系統,則可以直接將程序拷入到宿主機相應的目錄內,在目標機Linux中可以直接使用。
  1.文件編程
  Linux的文件操作API涉及到創建、打開、讀寫和關閉文件。
  創建
  intcreat(constchar*filename,mode_tmode);
  參數mode指定新建文件的存取權限,它同umask一起決定文件的最終權限(mode&umask),其中umask代表了文件在創建時需要去掉的一些存取權限。umask可通過系統調用umask()來改變:
  intumask(intnewmask);
  該調用將umask設置為newmask,然后返回舊的umask,它只影響讀、寫和執行權限。
  打開
  intopen(constchar*pathname,intflags);
  intopen(constchar*pathname,intflags,mode_tmode);
  讀寫
  在文件打開以后,我們才可對文件進行讀寫了,Linux中提供文件讀寫的系統調用是read、write函數:
  intread(intfd,constvoid*buf,size_tlength);
  intwrite(intfd,constvoid*buf,size_tlength);
  其中參數buf為指向緩沖區的指針,length為緩沖區的大?。ㄒ宰止潪閱挝唬?。函數read()實現從文件描述符fd所指定的文件中讀取length個字節到buf所指向的緩沖區中,返回值為實際讀取的字節數。函數write實現將把length個字節從buf指向的緩沖區中寫到文件描述符fd所指向的文件中,返回值為實際寫入的字節數。
  以O_CREAT為標志的open實際上實現了文件創建的功能,因此,下面的函數等同creat()函數:
  intopen(pathname,O_CREAT|O_WRONLY|O_TRUNC,mode);
  定位
  對于隨機文件,我們可以隨機的指定位置讀寫,使用如下函數進行定位:
  intlseek(intfd,offset_toffset,intwhence);
  lseek()將文件讀寫指針相對whence移動offset個字節。操作成功時,返回文件指針相對于文件頭的位置。參數whence可使用下述值:
  SEEK_SET:相對文件開頭
  SEEK_CUR:相對文件讀寫指針的當前位置
  SEEK_END:相對文件末尾
  offset可取負值,例如下述調用可將文件指針相對當前位置向前移動5個字節:
  lseek(fd,-5,SEEK_CUR);
  由于lseek函數的返回值為文件指針相對于文件頭的位置,因此下列調用的返回值就是文件的長度:
  lseek(fd,0,SEEK_END);
  關閉
  只要調用close就可以了,其中fd是我們要關閉的文件描述符:
  intclose(intfd);
  下面我們來編寫一個應用程序,在當前目錄下創建用戶可讀寫文件“example.txt”,在其中寫入“HelloWorld”,關閉文件,再次打開它,讀取其中的內容并輸出在屏幕上:
  #include
  #include
  #include
  #include
  #defineLENGTH100
  main()
  {
  intfd,len;
  charstr[LENGTH];
  fd=open(“hello.txt”,O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);/*創建并打開文件*/
  if(fd)
  {
  write(fd,“Hello,SoftwareWeekly”,strlen(“Hello,softwareweekly”));
  /*寫入Hello,softwareweekly字符串*/
  close(fd);
  }
  fd=open(“hello.txt”,O_RDWR);
  len=read(fd,str,LENGTH);/*讀取文件內容*/
  str[len]=‘’;
  printf(“%sn”,str);
  close(fd);
  }
  2.進程控制/通信編程
  進程控制中主要涉及到進程的創建、睡眠和退出等,在Linux中主要提供了fork、exec、clone的進程創建方法,sleep的進程睡眠和exit的進程退出調用,另外Linux還提供了父進程等待子進程結束的系統調用wait。
  fork
  對于沒有接觸過Unix/Linux操作系統的人來說,fork是最難理解的概念之一,因為它執行一次卻返回兩個值,以前“聞所未聞”。先看下面的程序:
  intmain()
  {
  inti;
  if(fork()==0)
  {
  for(i=1;i《3;i++)
  printf(“Thisischildprocessn”);
  }
  else
  {
  for(i=1;i《3;i++)
  printf(“Thisisparentprocessn”);
  }
  }
  執行結果為:
  Thisischildprocess
  Thisischildprocess
  Thisisparentprocess
  Thisisparentprocess
  fork在英文中是“分叉”的意思,一個進程在運行中,如果使用了fork,就產生了另一個進程,于是進程就“分叉”了。當前進程為父進程,通過fork()會產生一個子進程。對于父進程,fork函數返回子程序的進程號而對于子程序,fork函數則返回零,這就是一個函數返回兩次的本質。
  exec
  在Linux中可使用exec函數族,包含多個函數(execl、execlp、execle、execv、execve和execvp),被用于啟動一個指定路徑和文件名的進程。exec函數族的特點體現在:某進程一旦調用了exec類函數,正在執行的程序就被干掉了,系統把代碼段替換成新的程序(由exec類函數執行)的代碼,并且原有的數據段和堆棧段也被廢棄,新的數據段與堆棧段被分配,但是進程號卻被保留。也就是說,exec執行的結果為:系統認為正在執行的還是原先的進程,但是進程對應的程序被替換了。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>