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的操作等。。。。。。。。。。。。

注:内容通过参考网上相关介绍资料,再通过自身实际操作汇总。

 

 

posted @ 2017-10-15 21:24  jadeny  阅读(5002)  评论(0编辑  收藏  举报