商务网站欣赏,单网页网站 企业,网站 类库,网页构建器【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 前面我们陆陆续续开发了差不多有10个驱动#xff0c;涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 前面我们陆陆续续开发了差不多有10个驱动涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的时候都很麻烦譬如说如果是驱动代码的问题就需要把sd卡拆下来重新烧入再比如说uboot和linux之间不能连续运行需要手动做一些配置之后再启动linux kernel还比如说使用480*272的dtb文件之后之前的网卡功能都丢失了很不方便。所以针对这些问题我们想办法集中处理一下这样有利于后期的复杂驱动调试、以及上层软件开发。 目前已经升级的开发环境主要有这7个方面 a解决uboot不能正常启动linux kernel的问题 b解决开机后需要输入root用户名的问题 c添加开机启动脚本的问题 d添加网卡 e安装ftp服务器软件 f安装telnet服务器软件; g自由升级zImage和dtb文件。 注1 实际使用的时候不要删除ftp账户。假设root账户无法登录这个时候之前创建的ftp账户还可以派上用场可以先用ftp登录然后su到root上面去。 注2另外一个建议就是大家上传可执行文件的时候一定要先压缩再解压这样基本肯定不会出问题。 1、解决uboot不能正常启动linux kernel的问题 要解决这个问题关键在于增加CONFIG_BOOTCOMMAND和CONFIG_BOOTARGS这两个宏。因为我们使用的是v3s这颗芯片所以在uboot上面可以把上述两个宏添加到include/configs/sun8i.h这个文件下面
#include configs/sunxi-common.h#ifdef CONFIG_BOOTCOMMAND
#undef CONFIG_BOOTCOMMAND
#endif#define CONFIG_BOOTCOMMAND setenv bootm_boot_mode sec; \load mmc 0:1 0x41000000 zImage; \load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb; \bootz 0x41000000 - 0x41800000;#ifdef CONFIG_BOOTARGS
#undef CONFIG_BOOTARGS
#endif#define CONFIG_BOOTARGS consolettyS0,115200 panic5 rootwait root/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default0 注意两个宏的设置都放在include头文件之后。当然因为这个文件发生了修改那么整个uboot就需要重新编译一下
make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- 等编译结束生成了我们需要的bin文件之后就可以pc上插入读卡器准备bin文件烧入了
feixiaoxingfeixiaoxing-VirtualBox:~/Desktop/u-boot-3s-current$ sudo dd ifu-boot-sunxi-with-spl.bin of/dev/sdb bs1024 seek8
[sudo] password for feixiaoxing:
3891 records in
3891 records out
398367 bytes (398 kB, 389 KiB) copied, 1.71158 s, 233 kB/s烧入的工具是利用ubuntu虚拟机里面的dd命令来完成的。为了保证烧入ok可以继续输入一个sync命令。结束后退出sd卡重新把micro sd卡插入到开发板上不出意外的话就可以看到uboot、kernel连续启动的过程了 如果你已经可以看到这样的内容代表当前uboot可以持续启动linux kernel了。 2、解决开机后需要输入root用户名的问题 如果当前还处于开发阶段每次都需要输入root用户名其实是很令人反感的一个事情。虽然是免密登录但是还是想着可以更方便一点。这个时候完全可以通过文件配置的方法来解决这一问题。
# Put a getty on the serial port
#console::respawn:/sbin/getty -L console 0 vt100# GENERIC_SERIAL
ttyS0::once:/bin/login root在原来/etc/inittab里面注释掉getty的内容添加login这一行那么我们每次开机的时候就不需要手动输入root这个用户了。并且开机之后自动切换到/root这个目录下面。 3、添加开机启动脚本的问题 有一些程序或者配置我们其实是希望系统启动后可以默认执行的比如这个时候就希望linux可以自动帮我们执行一些脚本例如auto.sh。要实现这个目标这个时候可以这么做分成三步。 第一步在/etc/init.d/rcS最后一行添加这么一句
/etc/rc.local第二步创建/etc/rc.local文件填充下面这些内容同时chmod x /etc/rc.local
#!/bin/sh
/root/auto.sh 第三步创建/root/auto.sh文件添加一点测试内容比如
echo hello, world同样auto.sh需要chmod x auto.sh设置一下让它变成可执行文件。为了测试我们的配置有没有效果可以按下板子上的复位键如果看到这些输出大体可以认为我们的设计是ok的。 仔细找一下还是发现了hello, world的身影。这说明我们的配置是正确的。 4、添加网卡 观察发现sun8i-v3s-licheepi-zero-with-480x272-lcd.dts和sun8i-v3s-licheepi-zero-with-lcd.dtsi这两个文件中都没有关于以太网的配置。而之前sun8i-v3s-licheepi-zero-dock.dts中则包含了相关的内容这个时候我们要做的就是把dsun8i-v3s-licheepi-zero-dock.dts中关于网卡的配置挪到sun8i-v3s-licheepi-zero-with-lcd.dtsi当中去就可以了 aliases {ethernet0 emac;};首先是ethernet0指向了emac
emac {status okay;
}; 其实是emac中的status设置为okay。别看这两步很简单但是如果不做的话网卡就是启动不起来。当然有了这两点还是不够的我们需要在/etc/network/interfaces中增加一点配置
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.230
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8从脚本上看系统启动后除了配置loopback之外还需要添加eth0并且需要进一步设置ip、netmask和gateway。这一顿操作之后如果pc电脑还在同一网段基本就可以和电脑之间实现ping的正常通讯了。
# ifconfig
eth0 Link encap:Ethernet HWaddr 02:00:A4:52:F3:CC inet addr:192.168.0.230 Bcast:0.0.0.0 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:384 errors:0 dropped:0 overruns:0 frame:0TX packets:162 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:33241 (32.4 KiB) TX bytes:7140 (6.9 KiB)Interrupt:36 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)# ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100): 56 data bytes
64 bytes from 192.168.0.100: seq0 ttl128 time92.529 ms
64 bytes from 192.168.0.100: seq1 ttl128 time12.744 ms
64 bytes from 192.168.0.100: seq2 ttl128 time38.267 ms
64 bytes from 192.168.0.100: seq3 ttl128 time60.146 ms
64 bytes from 192.168.0.100: seq4 ttl128 time84.125 ms
64 bytes from 192.168.0.100: seq5 ttl128 time80.020 ms
^C
--- 192.168.0.100 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max 12.744/61.305/92.529 ms5、安装ftp软件 嵌入式ftp一般都会使用vsftpd这个软件。大家可以通过buildroot来进行编译 选中了vsftpd之后就可以开始make编译。实际处理中如果发现buildroot下载vsftpd下载比较困难可以帮助它下载一下然后拷贝到./dl目录下再编译也是可以的。 编译结束后所有的根文件都在./output/target目录下这里有两个文件需要拷贝。一个是usr/sbin下面的vsftpd另外一个是etc/下面的vsftpd.conf。我们也需要把它拷贝到sd卡对应的根文件目录下。 这个vsftpd.conf需要按照下面这些内容重新配置下如果嫌麻烦可以直接拷贝下面这些内容粘贴上去
anonymous_enableNO
local_enableYES
write_enableYES
local_umask022
dirmessage_enableYES
xferlog_enableYES
connect_from_port_20YES
ftpd_bannerWelcome to blah FTP service.
chroot_local_userYES
chroot_list_enableYES
chroot_list_file/etc/vsftpd.chroot_list
listenYES
allow_writeable_chrootYES除此之外还需要几个操作步骤
touch /etc/vsftpd.chroot_list
mkdir /usr/share/emptyuseradd ftp #增加新用户ftp密码是ftpmkdir /home/ftp
chown ftp:ftp /home/ftp
chmod 755 /home/ftp有了这些做铺垫直接shell输入/usr/sbin/vsftpd 之后服务器就起来了。为了验证是不是真的有效可以用Filezilla客户端做一个测试即输入192.168.0.230用户名和密码都是ftp端口21连接看看是否成功如果成功进一步验证下文件上传、下载是否成功。 当然现在有个小问题就是每一次传输的时候好像都会有一个vsftpd进程起来这导致ps aux的时候看到好多vsftpd进程。确实有点奇怪只是暂时还没有影响使用。实在受不了的话只能killall vsftpd删除一下。 当然比较优雅一点的办法就是在vsftpd.conf里面添加一条max_per_ip1这也能达到我们的目的。 6、设置telnetd 之前我们和板子之间通信的时候都是走的串口ttyS0这没问题。但是如果能够使能telnet访问到开发板这样就显得更方便了。好在telnetd的引用也不复杂只需要在busybox开放telnetd即可。首先cd到buildroot目录下输入make busybox-menuconfig进而在Networking Utilities中选择telnetd即可 选择好之后直接make。这样buildroot会生成新的busybox。我们都知道根文件的很多命令都来自于这个busybox。所以下一步就是利用压缩的方法把新的busybox通过ftp上传到开发板上面。启动方式也很直接就是./busybox telnetd -l /bin/sh 。此时需要验证一下telnet的23号端口有没有打开输入netstat -an即可看到
# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
netstat: /proc/net/tcp6: No such file or directory
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 4 [ ] DGRAM 1444 /dev/log
unix 2 [ ] DGRAM 1949
unix 2 [ ] DGRAM 1448 有了telnet之后测试就可以脱离串口pc电脑也可以离开开发板感觉人一下子解放出来建议大家多试试telnet调试。 7、快速升级zImage和dtb文件 之前重新编译zImage和dtb文件的时候都是需要独立烧入sd卡使用十分不方便。现在有了网络之后升级过程只需要两部就可以完成 第一将升级前的文件用ftp拷贝到开发板注意压缩 第二mount /dev/mmcblk0p1 /mnt将原来的文件删除替换成新传上来的解压文件 第三重启电脑确认功能是否ok即可。