ev3编码软件linux,利用官方固件搭建EV3自制系统
3? ?? ?制作流程3.1? ?MINI-SD卡的準(zhǔn)備
EV3 MINI-SD卡的啟動需要按照如下的規(guī)范:
兩個分區(qū)
第一個分區(qū)50M,文件系統(tǒng)是FAT,用于放置linux內(nèi)核文件
第二個分區(qū)最好大于1G,文件系統(tǒng)是EXT3,用于放置linux根文件系統(tǒng)
具體的操作細(xì)節(jié),可以參考如下的網(wǎng)頁
[url=]http://www.linuxidc.com/Linux/2011-11/47797.htm[/url]3.2固件處理
從ev3source/lms2012/open_first/script/make_image.pl中分析出ev3固件的文件格式偏移文件說明
0x0uBootmini-sd不用
0x50000uImagelinux內(nèi)核文件
0x250000EV3.cramfs.bincramfs映像
uImage處理
編寫一個小程序?qū)Image從文件EV3 Firmware V1.06E.bin讀出
將linux內(nèi)核鏡像寫入mini-sd
mount /dev/sdb1 /mnt/d1? ?? ?? ? #加載mini-sd卡的fat分區(qū)cp uImage /mnt/d1? ?? ?? ?? ?? ? #拷貝內(nèi)核鏡像文件 umount /mnt/d1
cramfs映像處理
mount -t cramfs -o loop,offset=0x250000 "EV3 Firmware V1.06E.bin" /mnt/d2
目錄/mnt/d2內(nèi)容如下
將linux文件系統(tǒng)寫入mini-sd
cd /mnt/d2 tar –zcvf /home/root/ev3.tgz *? ?#將EV3的文件系統(tǒng)打包
umount /mnt/d2 mount /dev/sdb2 /mnt/d2? ?? ?? ? #加載mini-sd卡的EXT3分區(qū)
cd /mnt/d2 tar –zxvf /home/root/ev3.tgz? ? #解壓EV3文件系統(tǒng)
umount /mnt/d2
3.3? ?console線連接
杜邦線僅僅需要三根,紅黃藍(lán)
a? ?? ?USB TO TTL上
紅-GND
黃-RXD
藍(lán)-TXD
b? ?? ?NTX插座
c? ?? ?? ???連接圖
ps: 原以為需要洞洞板做連接,插口回來后發(fā)現(xiàn)不需要,直接使用杜邦線就可以了。當(dāng)然要小心點,工作時不要碰到就行。
3.4終端顯示驗證
接好線后,插入mini-sd卡,在mac/linux上面打開一個終端
執(zhí)行cu -s 115200 -l /dev/cu.SLAB_USBtoUART
打開EV3電源,終端上會顯示
EV3進入到官方操作界面,并且終端無響應(yīng)。
3.5? ?啟動WIFI
按照固件啟動的流程,會直接進入到lms2012提供的界面中,而沒有啟動wifi,我們需要做如下的修改:
a.? ?? ? 修改mini-sd卡
關(guān)機,取出mini-sd卡,重新在linux上mount
b.? ?? ? 增加wifi腳本
在/mnt/d2/etc/init.d目錄下增加一個可執(zhí)行腳本wifi.sh,主要是加載無線網(wǎng)卡需要的內(nèi)核驅(qū)動模塊,以及啟動WIFI,最后通過dhcpcd獲得IP。內(nèi)容如下
#!/bin/sh
echo "load modules compat"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/compat/compat.ko
echo "load modules cfg80211"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/net/wireless/cfg80211.ko
echo "load modules mac80211"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/net/mac80211/mac80211.ko
echo "load modules ath"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/drivers/net/wireless/ath/ath.ko
echo "load modules ath9k_hw"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
echo "load modules ath9k_common"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko
echo "load modules ath9k"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
echo "load modules ath9k_htc"
export FIRMWARE_DIRS="/lib/firmware"
/sbin/insmod /lib/modules/2.6.33-rc4/kernel/drivers/net/wireless/ath/ath9k/ath9k_htc.ko
echo "start wifi"
cd /home/root/lms2012/sys
./wpa_supplicant -B -c /etc/wpa_supplicant.conf -iwlan0
echo "requesting IP address"
udhcpc --retries=10 --now -i wlan0 -h ev3
d? ?? ?將wifi.sh加入啟動目錄level5中
cd ../rc5.d
ln –s ../init.d/wifi.sh S40wifi
e? ???修改WIFI密碼
修改/mnt/d2/etc/wpa_supplicant.conf
network={
ssid="Bella"
psk=dbc9c6cf6d4d8e9405842d2e4ab726f33f10de62c30254ff19512af0dca1bc0f
key_mgmt=WPA-PSK
proto=RSN
pairwise=CCMP,TKIP
group=CCMP
}
修改為自己wifi的ssid
使用wpa_passwd ssid passwd生成psk。注意,大小寫敏感
f? ???刪除rc5.d/S99lms,并卸載/mnt/d2
g? ???取出mini-sd,插入EV3,開機
如果一切順利的話,終端的內(nèi)容如下
另外,可以使用putty,telnet直接連接EV3的ip,192.168.100.10。當(dāng)然為了后期方便,大家還可以把sshd(dropbear)加入到rc5.d中。
到此為止,目標(biāo)A,B,C大功告成。
4遺留問題
目前shutdown命令還不能自動關(guān)機
5繼續(xù)折騰之路
其他WIFI網(wǎng)卡的支持
需要使用源碼來編譯??梢詤⒖糩url=]http://icube-avr.unistra.fr/en/index.php/Hacking_the_Lego_EV3[/url]
控制EV3提供的外設(shè)
目前EV3的外設(shè)包括,馬達,傳感器等,會在后續(xù)的文章中涉及。
其他軟件包的安裝
主要采用交叉編譯的方法,生成自己想要的軟件。例如,gdb, strace, http server等,和常規(guī)的linux開發(fā)差異不大。
6. 附錄
提取uImage文件的源碼
#include
#include
#include
#include
int main()
{
int ifd,ofd;
int begin = 0x50000;
int end? ?= 0x249999;
struct stat st;
unsigned char* ptr;
char* fname ="EV3 Firmware V1.06E.bin";
char* ofile ="uImage";
ifd = open(fname,O_RDONLY);
if(ifd == -1)
return -1;
ofd = open(ofile,O_CREAT | O_TRUNC | O_RDWR,0664);
if(ofd == -1)
return -1;
fstat(ifd,&st);
ptr = mmap(NULL,st.st_size,PROT_READ,MAP_SHARED,ifd,0);
if(ptr == MAP_FAILED)
return -1;
while(ptr[end] == 0xFF && end > begin )
end--;
write(ofd,ptr+begin, end-begin+1);
munmap(ptr,st.st_size);
close(ofd);
close(ifd);
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的ev3编码软件linux,利用官方固件搭建EV3自制系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 改用户组密码,Linux用户
- 下一篇: linux系统分区不,其中,不属于Lin