ubuntu下linux移植到開發板(持續更新)


一、環境搭建:

1、ubuntu系統安裝

  以下操作都是在ubuntu16.04基礎上進行操作的。具體的系統安裝不進行說明。可以有以下方案,具體根據個人情況進行安裝。

  •   win7下安裝虛擬機進行ubuntu系統安裝;
  •   win7+ubuntu雙系統;
  •   純ubuntu系統;

2、配置安裝secbulk的下載環境

  這里的安裝dnw其實就是從網站上下載【dnw4linux-master.zip】,並把這個文件解壓到一個目錄中。【下載地址:  https://github.com/Qunero/dnw4linux】其中包含     secbulk

  下載完代碼后,一定要閱讀里面的README

  1)源碼說明:

  本源代碼收集自網絡,經過整理和加入宏定義,使其適用於OK6410開發板;對

  源碼進行了適當的注釋和錯誤糾正;同樣以GPL協議發布;

  2)使用說明:

  a、先在/home下新建一個mydrive(名字可以自己取)(mkdir /home/mydriver),

  b、將dnw4linux-master.zip中的“secbulk_driver”文件夾復制到該“mydrive”文件夾中。

  c、使用jadeny@jadeny-K42Jc:~$ dmesg檢查系統的設備信息。

[23767.867752] usb 2-1.1: Product: SEC S3C2410X Test B/D
[23767.867760] usb 2-1.1: Manufacturer: System MCU
[23767.868277] secbulk:secbulk probing...
[23767.868282] secbulk:bulk out endpoint found!
[23777.302060] usb 2-1.1: USB disconnect, device number 10
[23777.302145] secbulk:secbulk disconnected!
[23889.626700] usb 2-1.1: new full-speed USB device number 11 using ehci-pci
[23889.720193] usb 2-1.1: New USB device found, idVendor=5345, idProduct=1234(設備信息編號)
[23889.720199] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[23889.720202] usb 2-1.1: Product: SEC S3C2410X Test B/D
[23889.720205] usb 2-1.1: Manufacturer: System MCU
[23889.720545] secbulk:secbulk probing...
[23889.720548] secbulk:bulk out endpoint found!
jadeny@jadeny-K42Jc:~$ 

  d、進入secbulk_driver子目錄,修改文件secbulk.c中的關於DOWNLOAD_USB_ID_MAJOR和DOWNLOAD_USB_ID_MINOR的宏定義,讓其與你的usb對應,可以通過lsusb命令查看獲得該id的信息;

  如下所示:  

#define SECBULK_MAJOR    102
#define SECBULK_MINOR    0
#define DRIVER_NAME    "secbulk"
#define BULKOUT_BUFFER_SIZE    512

#ifdef OK6410 
    #define        DOWNLOAD_USB_ID_MAJOR        0x5345//0x04e8
    #define        DOWNLOAD_USB_ID_MINOR        0x1234
#else                                           /* add your usb info if neccessary */
    #define        DOWNLOAD_USB_ID_MAJOR        0x5345//0x04e8
    #define        DOWNLOAD_USB_ID_MINOR        0x1234
#endif

  e、使用make(在secbulk_driver下執行)。生成secbulk.ko模塊文件。

  f、$ sudo insmod secbulk.ko ;加載該模塊到內核(注意:需要root權限)

    加載后用dmesg命令可以看到模塊已經成功加載
         [23889.720545] secbulk:secbulk probing...
    [23889.720548] secbulk:bulk out endpoint found!
    將secbulk.ko驅動設為自動加載:

       h、直接執行make clean, 讓你的源碼目錄干干凈凈;

  i、為了能讓設備啟動時自動加載進行如下修改。修改/etc/rc.local文件

    先在住目錄建立mydriver目錄:mkdir ~/mydriver

    將驅動放入自定義mydriver中:cp secbulk.ko ~/mydriver/

    修改/etc/rc.d/rc.local文件,末尾加入: sudo insmod $HOME/secbulk.ko

    注意: 將上面的$HOME替換成實際的絕對路徑,比如: /home/mydriver/secbulk_driver

     注意,當前編譯好的dnw在32位linux可用,但是secbulk.ko驅動文件需要自己編譯必須同當前使用的內核的版本一致,內核版本升級后也需要重新編譯;

/××問題1×/ubuntu以下無法找到ttyUSB0,即使是文件還是命令都找不到。

在沒有接U轉串先,直接接U線是無法找到ttyUSB0。

/××檢查是否有u轉串×/

Linux下如何使用USB轉串口設備
對沒有串口的筆記本持有者來說,做硬件開發經常為沒有串口而煩惱,不過現在有了USB轉串口設備。但是新的問題又出現了,比如說對於Minicom下的PC機和目標機通信還是存在着一些配置問題,下面就說一下linux下USB轉串口的具體配置和問題:

注意: 默認情況下ubuntu已經安裝了USB轉串口驅動(pl2303)。

1、# lsmod | grep usbserial
如果有usbserial,說明系統支持USB轉串口。
usbserial              40960  1 ch341

2、插上USB轉串口,在終端輸入命令#dmesg | grep ttyUSB0,如果出現連接成功信息,則說明ubuntu系統已經識別該設備了。

3、在上面minicom的配置中設置Serial Device: /dev/ttyUSB0,重啟開發板,這樣基本上就可以正常使用minicom來打印串口信息了。

4、問題
如果經過上面的步驟minicom還是不能正常工作,出現如下錯誤提示:
# sudo minicom
minicom: cannot open /dev/ttyUSB0: 沒有該文件或目錄

這時可以嘗試換一個USB口,然后再次操作以上流程。 如果還是提示這個錯誤,那么可以使用下面的方法來解決。

 

/××解決方法×/

1、安裝usbmount

$ sudo apt-get install usbmount

2、更改usbmount配置文件

$ sudo gedit /etc/usbmount/usbmount.conf

3、在打開的文件中找到FILESYSTEM,並在其中添加vfat,ntfs

4、FS_MOUNTOPTIONS這個選項里加入”"-fstype= vfat,iocharset=utf8,codepage=936,umask=000,users”

5、重啟udev

$sudo /etc/init.d/udev restart

6、重啟Ubuntu

$ sudo reboot

重啟之后即可識別USB。
注:重啟系統的時候請將開發板的U口先拔出,或則系統無法正常進入。

3、使用minicom將make生成的可執行文件復制到開發板的linux系統中(前提開發把bootload和linux以及下載進去。)主要是測試是否能夠通過minicom將文件復制到開發板中。

1)安裝minicom
         sudo apt-get install minicom

2)配置minicom:
        1 . 在終端中輸入minicom以啟動minicom;
        2. 先按下Ctrl + a, 放開, 再按o, 出現配置菜單.
        3. 選擇 Serial port setup, 此時所示圖標在“Change which setting”中,鍵入“A”,此時光標移到第A項對應處:串口COM1對應ttyS0, COM2對應ttyS1. (注意選擇)

具體的配置信息如下所示:

Serial port setup [Enter]
+-------------------------------------------------------------+
| A -    Serial Device      : /dev/ttyUSB0                    |
| B - Lockfile Location     : /var/lock                       |
| C -   Callin Program      :                                 |
| D - Callout Program      -:                                 |
| E -    Bps/Par/Bits       : 115200 8N1                      |
| F - Hardware Flow Control : No                              |
| G - Software Flow Control : No                              |
|                                                             |
|    Change which setting?                                    |
+-------------------------------------------------------------+ 

 

注意: 如果沒有使用USB轉串口,而是直接使用串口,那么Serial Device要配置為/dev/ttyS0。對波特率,數據位和停止位進行配置,鍵入“E”,波特率選為115200 8N1 (奇偶校驗無, 停止位1), 硬/軟件流控制分別鍵入“F”“G”並且都選NO.在確認配置正確之后,可鍵入回車返回上級配置界面,並將其保存為默認配置。(即save setup as dfl),之后重啟minicom是剛才配置生效,在連上開發板的串口線后,就可在minicom中打印正確的串口信息了。

注:
這時候可以打印串口的信息了,但是在通過串口用xmodem協議燒寫內核時會提示沒有xmodem協議。 所以還必須安裝軟件包:lrzsz sudo apt-get install lrzsz

下次在輸入minicon 即可直接進入。
命令minicom是進入串口超級終端畫面,而minicom -s為配置minicom。
說明/dev/ttyS0 對應為串口0 為你連接開發板的端口。

注意:非正常關閉minicom,會在/var/lock下創建幾個文件LCK*,這幾個文件阻止了minicom的運行,將它們刪除后即可恢復

組合鍵的用法是:先按Ctrl+A組合鍵,然后松開這兩個鍵,再按Z鍵。另外還有一些常用的組合鍵。
(1)S鍵:發送文件到目標系統中;
(2)W鍵:自動卷屏。當顯示的內容超過一行之后,自動將后面的內容換行。這個功能在查看內核的啟動信息時很有用。
(3)C鍵:清除屏幕的顯示內容;
(4)B鍵:瀏覽minicom的歷史顯示;
(5)X鍵:退出mInicom,會提示確認退出。

3)配置文件所在目錄

Ctrl + A --> O
+-----[configuration]------+
| Filenames and paths      |
| File transfer protocols -|
| Serial port setup        |
| Modem and dialing        |
| Screen and keyboard      |
| Save setup as dfl        |
| Save setup as..          |
| Exit                     |
+--------------------------+

選擇"Filenames and paths"
+-----------------------------------------------------------------------+
| A - Download directory : /tmp                                         |
| B - Upload directory   : /tmp/demo_space                              |
| C - Script directory   :                                              |
| D - Script program     : runscript                                    |
| E - Kermit program     :                                              |
| F - Logging options                                                   |
|                                                                       |
|    Change which setting?                                              |
+-----------------------------------------------------------------------+ 
(1)A - download 下載文件的存放位置(開發板 ---> PC)開發板上的文件將被傳輸到PC機上的/home/crliu目錄下。 (2)B - upload 從此處讀取上傳的文件(PC ---> 開發板)PC機向開發板發送文件,需要發送的文件在/tmp目錄下(PC機上的目錄)。做了此項配置后,每次向開發板發送文件時,只需輸入文件名即可,無需輸入文件所在目錄的絕對路徑

 

4)將開發板和pc通過usb線鏈接好后,minicom開啟成功。對開發板上,開發板運行uboot之后按空格鍵,窗口顯示。

 

 +------------------------------------------------------------+              
 |                     Select Menu                            |              
 +------------------------------------------------------------+              
 | [0] Download & Run                                         |              
 | [1] Download to flash                                      |
 | [2] Download From UART                                     |
 | [3] Boot My Application                                    |
 | [4] Boot Linux                                             |
 | [5] Boot Wince                                             |
 | [6] Erase Flash Partition                                  |
 | [7] Config parameters                                      |
 +------------------------------------------------------------+

 

選擇[4]進入linux系統。開發板啟動成功。

6)通過minicom將開發板切換到tmp下。並查看下面的文件,hello就是之前通過minicom下載進去的文件。

# cd /tmp                                                                       
# ls                                                                            
qtembedded-0  qtopia-0                                            
# 

7)通過minicom將hello文件復制到開發板的tmp路徑下。

  在界面下,ctrl+A,Z進入功能界面選擇“ Minicom Command Summary ”,選擇s

+-------------------------------------------------------------------+      
|                      Minicom Command Summary                      |      
|                                                                   |      
|              Commands can be called by CTRL-A <key>               |      
|                                                                   |      
|               Main Functions                  Other Functions     |      
|                                                                   |      
| Dialing directory..D  run script (Go)....G | Clear Screen.......C |      
| Send files.........S  Receive files......R | cOnfigure Minicom..O |      
| comm Parameters....P  Add linefeed.......A | Suspend minicom....J |      
| Capture on/off.....L  Hangup.............H | eXit and reset.....X |      
| send break.........F  initialize Modem...M | Quit with no reset.Q |
| Terminal settings..T  run Kermit.........K | Cursor key mode....I |      
| lineWrap on/off....W  local Echo on/off..E | Help screen........Z |      
| Paste file.........Y  Timestamp toggle...N | scroll Back........B |      
| Add Carriage Ret...U                                              |      
|                                                                   |      
|             Select function or press Enter for none.              |      
+-------------------------------------------------------------------+ 
選擇S,跳出以下界面,選擇zmodem。回車。
| zmodem    |'                                     
| ymodem    |                                      
| xmodem    |                                      
| kermit    |                                      
| ascii     |
跳出文件選擇界面
ya+-------------------[Select one or more files for upload]-------------------+
ya|Directory: /tmp/demo_space                                                 |
VF| [..]                                                                      |
Mo| hello                                                                     |
Fr|                                                                           |
in|                                                                           |
st|                                                                           |
mo|                                                                           |
et|                                                                           |
if|                                                                           |
  |                                                                           |
Pl|                                                                           |.
Wa|                                                                           |
QD|                                                                           |
  |                                                                           |
st|                                                                           |
# |                                                                           |
# |              ( Escape to exit, Space to tag )                             |
# +---------------------------------------------------------------------------+
選擇hello之后回車,開始將文件傳給開發板。
init star+-----------[zmodem upload - Press CTRL-C to quit]------------+        
starting |Sending: hello                                               |        
mount: mo|sz: skipped: hello                                           |        
eth0: lin|                                                             |        
ifconfig:|Transfer complete                                            |        
         |                                                             |        
Please pr| READY: press any key to continue...                         |tc/dict.
Warning: |                                                             |        
QDir::rea+-------------------------------------------------------------+o
等待文件傳完之后。使用ls查看tmp下文件。多了一個hello(直接打印“hello”)
# # ls                                                                          
hello         qtembedded-0  qtopia-0                                            
#
運行查看文件執行結果。
# ./hello                                                                       
Hello World                                                                     
#

文件傳輸完成。

 **交叉編譯環境**

 

1)解壓 arm-linux-gcc-3.4.1.tar.bz2
  #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
  解壓過程需要一段時間,解壓后的文件形成了 usr/local/arm/3.4.1 文件夾,進入該文件夾,將arm文件夾拷貝到/usr/local/下
  現在交叉編譯程序集都在/usr/local/arm/3.4.1/bin下面了

 

2)修改/etc/profile文件:

root@jadeny-K42Jc:~# sudo gedit /etc/profile(或則# vim /etc/profile)

 

增加路徑設置,在末尾添加如下內容,保存/etc/profile文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin

 

3)刷新環境變量,不用重啟電腦:

 

 root@jadeny-K42Jc:~# source /etc/profile

在使用source命令時會出現
jadeny@jadeny-K42Jc:~$ sudo source /etc/profile
sudo: source:找不到命令
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

這時候,則要進行如下操作
jadeny@jadeny-K42Jc:~$ sudo -s
root@jadeny-K42Jc:~# source /etc/profile
root@jadeny-K42Jc:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/arm/3.4.1/bin:/snap/bin:/usr/local/arm/3.4.1/bin


注:還有一種方法。但是操作始終沒有將環境搭好,之后才采用上面的方法。
root@jadeny-K42Jc:~# source /root/.bashrc
root@jadeny-K42Jc:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

 

4)檢查是否將路徑加入到PATH:

 

   root@jadeny-K42Jc:~# echo $PATH

  /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
  顯示的內容中有/usr/local/arm/bin,說明已經將交叉編譯器的路徑加入PATH。至此交叉編譯環境安裝完成。

 


5)測試是否安裝成功

root@jadeny-K42Jc:/tmp/demo_space# arm-linux-gcc -v
Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs
Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm-linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1

說明交叉編譯環境成功。

6)編譯hello,測試交叉編譯工具

root@jadeny-K42Jc:/tmp/demo_space# arm-linux-gcc hello.c -o hello
root@jadeny-K42Jc:/tmp/demo_space# ls
hello  hello.c

生成了hello文件,說明交叉編譯環境是正常的。

 

***nfs*

/**問題*/

在電腦直接插入網線時ubuntu始終無法同開發板ping通,后來將wifi斷開,重新插拔以下網線就可以ping通了。

jadeny@jadeny-K42Jc:~$ ifconfig
ens5f5    Link encap:以太網  硬件地址 20:cf:30:2d:7d:2e  
          UP BROADCAST MULTICAST  MTU:1500  躍點數:1
          接收數據包:0 錯誤:0 丟棄:0 過載:0 幀數:0
          發送數據包:0 錯誤:0 丟棄:0 過載:0 載波:0
          碰撞:0 發送隊列長度:1000
          接收字節:0 (0.0 B)  發送字節:0 (0.0 B)
          中斷:32
有線正常之后

ens5f5    Link encap:以太網  硬件地址 20:cf:30:2d:7d:2e  
          inet 地址:192.168.1.106  廣播:192.168.1.255  掩碼:255.255.255.0
          inet6 地址: fe80::a05:bfac:9596:9c81/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  躍點數:1
          接收數據包:5 錯誤:0 丟棄:0 過載:0 幀數:0
          發送數據包:35 錯誤:0 丟棄:0 過載:0 載波:0
          碰撞:0 發送隊列長度:1000
          接收字節:300 (300.0 B)  發送字節:4958 (4.9 KB)
          中斷:32 

 

 

后續增加系統的移植,dnw的操作等。。。。。。。。。。。。

注:內容通過參考網上相關介紹資料,再通過自身實際操作匯總。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM