"重温"嵌入式开发第一课—跑起来

以上都做好了,什么都弄OK.就差建立NFS服务器然后进行linux的学习了.建立NFS服务器个人觉得还是建立在linux上更好一点.所以这里就需要让开发板能够访问到处于虚拟机中的linux了.
这里我使用的虚拟机是virtualbox,安装完成后系统中会出现两张网卡,同时选择两张网卡(一个虚拟机(host_only)的),一个是宿主机网络的(和开发板在同一个网络的.)右键选择"桥接";[图片上传中。。。(1)]
等待一会儿就会生成一个桥接的网络: [图片上传中。。。(2)]
然后设置桥接的网络的IP和开发板一样.
然后在设置虚拟机: [图片上传中。。。(3)]
再进入虚拟机中设置一个IP地址(和开发板同网段),然后就可以了直接访问了.不确定的话可以先ping一下排除问题,实际走到这里我这里是可以了.之前学过一段时间linux,但是过于松散,现在回头换了地方竟然忘了怎么给烧系统了.完了.把命令重新写在这边便于记忆吧!

一、装编译器

装编译器很好搞,就直接解压了然后再用户的bashrc中导入相关的位置就可以了。这里不贴代码了(之前已经弄好了,就暂时懒得弄了)。

二、编译相关uboot和kernel

在光盘中得到了linux kernel,在国嵌中得到了uboot,编译我这里也没有废话要讲,因为就只是调用编译器进行make。

说明:这里uboot会生产uboot-spl.bin和u-boot.bin(220KB左右),最后合成成一个smart210-uboot.bin程序(250KB左右)

三、把编译好的uboot下载到sd卡上

这一块就是我我忘记了的地方,记得是linux使用dd命令,windows有工具来着。这里就直接使用linux搞事,记录命令如下:

//先查看sd卡所在的磁盘
ls /dev/sd*
//找到自己的磁盘过后(这里我是 /dev/sdb)
//查看磁盘前部数据
sudo hexdump -n 1048576 /dev/sdb
//清除前面1m数据
sudo dd if=/dev/zero of=/dev/sdb count=2000
//清除过后再检查一遍
sudo hexdump -n 1048579 /dev/sdb
//这时候就可以直接写入uboot了
sudo dd iflag=dsync oflag=dsync if=./u-boot.bin of=/dev/sdb seek=1
//再次查看一下,有数据了。之前由于下错了映像导致了烧写进去了没反应.检查一下重新烧录就好了.

四、进入uboot操作

下面介绍一部分重要的uboot操作而自己忘得差不多的操作:

printenv    //打印环境变量
setenv name value   //将环境变量中项目名为name的写入 value值
saveenv     //保存环境变量到flash中
tftp 0x20000000 smart210-uboot.bin //将该bin文件下载到指定地址
nand erase 0 50000 //擦除FLASH在0地址开始的0x50000偏移
nand write 20000000 0 50000  //向nand flash 中写入uboot
reset  //复位,重启

这里遇到几个问题:

问题1:这里的uboot 有点大,260kb左右.所以烧写的时候选择了0x50000 这个大小,但是我发现保存环境变量会在0x40000上面保存,会导致出现问题,保存了环境变量,重启uboot就启动不起来了.为了让环境变量改一个位置,同时不要和linux划分分区冲突了.这里就参考的linux启动时候的分区输出和uboot占用,综合考虑选择了以下地址,暂时这个uboot放不下开机logo了.

解决办法:uboot中定义的环境变量保存存放在:

include/configs/smart210.h
#define CONFIG_ENV_OFFSET 0Xa0000 (这个地址要计算下,不然擦写地址不是整数有问题.)

五、搭建网络环境

以上都做好了,什么都弄OK.就差建立NFS服务器然后进行linux的学习了.建立NFS服务器个人觉得还是建立在linux上更好一点.所以这里就需要让开发板能够访问到处于虚拟机中的linux了.

这里我使用的虚拟机是virtualbox,安装完成后系统中会出现两张网卡,同时选择两张网卡(一个虚拟机(host_only)的),一个是宿主机网络的(和开发板在同一个网络的.)右键选择"桥接";

40464272.png

等待一会儿就会生成一个桥接的网络:

40496393.png

然后设置桥接的网络的IP和开发板一样.

然后在设置虚拟机:

40545829.png

再进入虚拟机中设置一个IP地址(和开发板同网段),然后就可以了直接访问了.不确定的话可以先ping一下排除问题,实际走到这里我这里是可以了.

六、搭建文件系统(NFS)

这里的文件系统是指的根文件系统,因为之前自己的有写教程,所以自己这里贴出来当时的笔记:

http://www.jianshu.com/p/088dd635a50d

但是我这里因为friendlyarm提供了包,我这里先暂时不去弄那么复杂,直接解压他给的包搭建NFS.

搞着搞着忽然想起来的我linux还没有搭建NFS.那就赶紧搭建吧.过程如下.

先输入以下命令,安装nfs:

sudo apt-get install nfs-kernel-server
//这里一般都会默认装好 nfs-common 如果没有默认装好使用以下命令安装即可:
sudo apt-get install nfs-common

然后再修改配置文件: /etc/exports

sudo vim /ect/exports

在文件的最后添加如下内容:(这里我把目录放在了我的用户目录下新建了一个文件夹)

/home/jet/nfs *(rw,sync,no_root_squash,no_subtree_check)
//解释下以上配置项目意思
//* 代表所有网段都可以访问
//rw 挂载此目录对目录享有读写权限
//sync 资料同步写入内存和硬盘
//no_root_squash : root用户具有对根目录完全管理访问权限
//no_subtree_check :不检查父目录的权限

再使用以下命令是以上配置生效:

exportfs -rv
sudo chmod 777 /home/jet/nfs -R //修改权限

接下来就是重启服务,检查配置的时候了:

sudo /etc/init.d/rpcbind restart //重启portmap
sudo /etc/init.d/nfs-kernel-server restart //重启nfs服务
showmount -e  //显示出共享的目录

接下来进行测试,这里为了验证问题,使用另外一台笔记本测试.安装的是win7 旗舰版(专业版不包含NFS客户端),在 程序和功能 -> 打开或关闭windows功能中添加 NFS客户端.然后就可以使用了,下面是安装好客户端后的测试过程:

showmount -e 192.168.0.91
mount 192.168.0.91:/home/jet/nfs Z:
//上面执行完了过后就能够在windows下看到一个多出来的Z盘.里面写入一个文件.检查linux中果然也多出来了一个文件.到此完成任务.
umount Z:  //断开连接.

接下来就可以放心的将文件系统解压到nfs中去了.

重新编译内核,配置menuconfig.我去,这里竟然提示ncurses这个没有.按照提示安装了下.没找到.度娘看了下.使用如下命令安装即可:

sudo apt-get install libncurses-dev

再次测试:

make menuconfig ARCH=arm
//去除 general Setup -> initramfs 
//打开 File System -> networks File system -> root file system on NFS (勾选)
//然后重新编译就就可以了.
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
//喝杯水,练练字.差不多就好了.

7.直接去uboot测试启动(先搭建TFTP服务器)

之前测试内核都是在windows下面运行了一个小程序开了TFTP服务器.这里我就不继续沿用这种笨的办法了.我直接在linux上开一个tftp服务器吧.如下是操作过程:

sudo apt-get install tftpd-hpa tftp-hpa
//然后修改配置文件
sudo vim /etc/default/tftpd-hpa
//配置文件如下
TFTP_USERNAME="tftp
TFTP_DIRECTORY="/home/jet/tftpboot //工作目录
TFTP_ADDRESS="[::]:69"
TFTP_OPTIONS="-l -c -s"
//保存,重启服务器:
sudo service tftpd-hpa restart
//在tftpboot目录下新建一个1.txt文件.填入任何内容,为了测试
tftp 127.0.0.1
get 1.txt
当前目录出现一个1.txt..成功了.

将编译好的kernel(uImage) 放入tftpboot中.让开发板启动到uboot中.并将环境变量进行如下修改:

......卧槽,刚才搞着搞着还尼玛蓝屏了.坑爹啊.搞了十几分钟才搞定,坑爹.

先把uboot环境变量贴上吧:

setenv bootcmd "tftp 21000000 uImage; bootm 21000000"
setenv bootargs root=/dev/nfs rw nfsroot=192.168.0.91:/home/jet/nfs/rootfs_rtm_210 ip=192.168.0.110:192.168.0.91:192.168.0.90:255.255.255.0::eth0:off console=ttySAC0,115200
saveenv
reset

不出意外,保存过后直接复位能够重启到系统中.我这里很顺利就进去了.根文件系统也挂载上了.到这里,尝试就结束了.等下有空自己做一个根文件系统练练手试下.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容