烧写内核的方法总结:
在有Uboot的前题下,通过NFS挂载来烧写。
在开启粤嵌gec210开发板的时候,在3秒内按任意键,进入uboot,接下来按e,进入可输入命令状态。
(1)通过pri来检查ip
(2) u-boot>setenv etnaddr 11:22:33:44:55:66 // 是设置板子的mac地址,板子已经写好了 ,无需设置
u-boot>setenv ipaddr 192.168.0.102//是设置板子的IP地址。
u-boot>setenv serverip 192.168.0.101//是设置提供内核下载的服务器IP地址。
u-boot>setenv gatewayip 192.168.0.1 //设置网关
u-boot>setenv netmask 255.255.255.0 //设置子网掩码
u-boot>saveenv // !!! 保存环境变量 重要!!
(3)可以通过 set serverip 192.168.1.111 来修改ip以保持和要挂载的pc机的ip一样。
(4)要注意gatewayip也要和pc机一样,不然在烧内核的时候会出现烧到一半就出错的现象。这时 候,要在pc机的Ubuntu里面的根目录下的 /etc/hosts 里面加上
192.168.1.111 /home/share/nfs6410/
(5)nfs 0x40000000 192.168.1.101:/home/share/nfs6410/uImage(这里也可以直接烧写zImage)
nand erase 0x600000 0x500000 (擦除原内核的内存地址,前面是开始地址,后面是长度)
nand write 0x40000000 0x600000 0x500000 (写入新的内核)
(6)在烧写.bin文件的时的步骤为:
先用pri指令检查IP的配置;
在 ping 192.168.1.101 看是否能和PC端(服务端)ping通;
最后 nfs 0x40000000 192.168.1.101:/home/share/nfs6410/led.bin
go 0x40000000
可以看到板子上小灯在爆闪。
(7)要使板子不用数据线就和上位机通信,就必须往板子里配SSH协议,这个可以参考以下的网址:http://blog.csdn.net/xy010902100449/article/details/50343733
http://blog.sina.com.cn/s/blog_86d540e401019yie.html
这之中会有教程。另外,下载的有关包,需要编译其中的一些文件,才能在板子上使用。
其中,需要注意的是:
关于其中的“sshd”文件,拷贝到板子的 /usr/sbin/ 目录下后,是白颜色的,这是不行的,会出现:Permission denied 的问题,这时候,需要用下面的命令:
[root@LQD sbin]#chmod +X sshd
来使sshd文件变成绿颜色的可执行文件,这样就可以用了。
如果出现了:unknow uid 的问题,这时候需要修改一下root用户的超级权限。在:
根目录下的 “passwd” 文件里面,修改成如下:
root:z6G.czlb1LRJA:0:0:root:/:/bin/sh
其中,后面的两个“0”代表着最高权限,这是约定熟成的,不能更改。本来的是只有最后一个是 “0”,但是这样的话会出问题,当用 su root 命令时,虽然现实进入了root,但是在修改文件内容的时候,会不成功,显示没有权限修改,只读。所以要把后面两个都变成“0”。然后再进root,就真正的进入了超级权限用户了。另外,要在“passwd”文件里面加下面的语句:
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
这样,就可以使用SSH协议进行和上位机的通讯了。另外,在/etc/init.d/rcS 中,添加如下语句:
/usr/sbin/sshd
这样就可以开开板子后自动启动SSH协议了。
在上位机上,用如下指令:
ssh root@192.168.0.103
其中,root是你的用户名,192.168.0.103 是你的板子上的IP。
(8)板子在WIFI模块RT3070的移植中可能会出现的问题:
当插上无线网卡后,打开开发板,会出现
[ 837.672226] alloc mem OK
[ 837.672370] ===>rt_ioctl_giwscan. 25(25) BSS returned, data->length = 3827
[ 838.007651] going to alloc mem
[ 838.007689] alloc mem OK
[ 838.007825] ===>rt_ioctl_giwscan. 27(27) BSS returned, data->length = 4050
[ 840.612346] going to alloc mem
[ 840.612399] alloc mem OK
[ 840.612534] ===>rt_ioctl_giwscan. 25(25) BSS returned, data->length = 3827
[ 840.937367] going to alloc mem
[ 840.937404] alloc mem OK
[ 840.937541] ===>rt_ioctl_giwscan. 27(27) BSS returned, data->length = 4050
[ 843.544837] going to alloc mem
的错误,这时候其实是在搜索无线网络时候出来的打印信息,当连接上后就没了,可以注释掉,我们要在 etc/ 中的 wpa_supplicant.conf 文件中进行修改,具体要修改成如下所示:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="idart-wlan311"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="XXXXXXXX"
}
其中有篇文章有具体的说明,连接:https://www.linuxidc.com/Linux/2014-03/97630p2.htm
(9)在板子上通过指令: ping 192.168.0.139 来检查能不能和笔记本上的linux(ubuntu)ping通,在能ping通的前题下,通过指令:
mount -t nfs -o nolock 192.168.0.139:/home/share/nfs6410/ /mnt/
来挂载笔记本上Ubuntu里面的一个分区。
(10)如果在gec210上能通过 ping 192.168.0.139 成功ping通笔记本,但是
mount -t nfs -o nolock 192.168.0.139:/home/share/nfs6410/ /mnt/
不行,这时候需要检查笔记本的linux上的 /etc 里面的 exports 文件里面加上如下一句话:
/home/share/nfs6410 *(rw,sync,no_root_squash,no_subtree_check)
(11)记录有关“wpa_supplicant.conf”文件里面的信息:
ctrl_interface=DIR=/var/run/wpa_supplicant
network={
# ssid="208-11"
# scan_ssid=1
# key_mgmt=NONE
# proto=WPA
# group=CCMP TKIP WEP104 WEP40
# psk=56d910fd8f89276aaa62d6b356a3dc18937788ff257f38cdf6c4f50410be0597
# eap=TTLS PEAP TLS
ssid="TP-LINK_208_1"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="gy208208"
}
其中,‘TP-LINK_208_1’是有密码的路由器连接时需要的配置。
而‘208-11’是没有密码的路由器连接时需要的配置,其中:
psk=56d910fd8f89276aaa62d6b356a3dc18937788ff257f38cdf6c4f50410be0597
为必须要加上的,不然会报错,当出现Err;Tc.DoSr的错误时,可以考虑换一个路由器的名字。
PS:可能会更新的。
我曾经跨过山和大海,也穿过人山人海,我曾经拥有着的一切,转眼都飘散如烟,我曾经失落失望失掉所有方向,直到看见平凡才是唯一的答案。
——韩寒《平凡之路》