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的操作等。。。。。。。。。。。。
注:内容通过参考网上相关介绍资料,再通过自身实际操作汇总。