让Barebox在Tiny6410上跑起来

来源:互联网 发布:淘宝限时打折在哪里 编辑:程序博客网 时间:2024/05/16 12:44

        本文专属tiny6410吐槽系列~如有得罪,请多包涵~在此也留个联系方式~291222536@qq.com,欢迎大家一起交流吐槽心得~



        今天来吐槽一下barebox这个BL,最近机缘巧合之前手头多了块tiny6410友善的板子,又是嵌入式,既然非技术类的东西就算不吐槽了,今天的话题吧——barebox~

        原来在openrisc平台上得知这个BL,但是技术水平和时间问题没在O的平台搞通,惭愧啊~但是现在既然多了6410的板子,现在就可以稍微搞一下了~

        去官网把http://barebox.org/把源码下下来,然后顺便看看一下官方的介绍。


          Barebox (formerly known as u-boot-v2) is a bootloader that inherits the best of U-Boot and the Linux kernel: The size and look-and-feel of u-boot, with driver model and lots of design concepts from the kernel.


        按官方的解释的话,如果像我们这些做linux的来说是不是从barebox过渡到linux driver会有迹可寻?我猜的而已,还没认真分析过实质的代码~

        选择barebox的原因是什么,这里先声明一下,喜欢研发的人都喜欢捣鼓,绝对不是说什么炫耀技术很屌这样,纯粹的,这系列的博文只是工作记录,可以说这里面记录的只是步骤而已,完全没有技术含量的,因为我发现在我什么一起工作的小伙伴们真的很少有人会去写类似于工作记录这些东西,其实包括我也是这样子的,很烦做这些事,不想吐槽负能量了~

        正题吧,截止到我写下这些文字的时刻,2013-12-02下午15:23分,barebox官网的master主分支发布到2013.11.0,所以我只能选择这个最新的作为这次的实验材料了~

        有点要说明的就是,其实6410的各家开发板的厂家提供的BL已经够使用开发的了,说实在,完全是没有必要去重新搞barebox这个不完善的BL的,纯粹的,技术上而已,我们在学。

        首先啊,这个移植到barebox的只有很基本的功能,芯片底层初始化,ddr控制器可以工作,网卡工作可以工作,仅此而已,官方的master版本没有针对s3c6410的芯片提供flash的驱动,但是瞄了一下210的a8的芯片和2416的芯片就有,果断还是有需求就有市场。

        能找到和6410平台有关的就在http://git.pengutronix.de/这个git server上有,在


        

        在jbe/barebox.git的分支上,里面有Juergen Beisert这位牛牛写过6410的分支代码,后来我自己git下来了,编译不过去,所以亲们哪位高手有空研究一下吧~

        后来在google上search的结果有网友给barebox支持友善的210和6410平台,patch我大概都看了一下,不是很难,难得的是发现博客园这个网站上来lknlfy这位博主打了nandflash的驱动patch,后来我一直在google上面search都没有发现这个patch从哪里来的,包括patch里面nandflash驱动的作者Juergen Beisert,也就是barebox的一个git server的分支作者的git tree也没有发现,但是那些patch我都没有试过,后面真的要增强barebox这个BL的时候再去考虑吧~

        大家可以用google搜下一下”Barebox for Tiny6410”这个关键字即可。

        再说明一遍,这次在tiny6410上跑起barebox,按照习惯使用u-boot的朋友来说,就是,我能从服务器端通过tftp加载内核并boot起内核,但是不能用barebox实现自烧写存储介质,包括flash和SD卡,也就是不能固化代码。

        现在barebox的master分支的代码在手了,至于还有什么交叉编译环境搭建这些我就不说了,我自用的环境是这样的:

        系统:xubuntu-12.04

        交叉编译器:arm-linux-gcc-4.5.1-v6-vfp-20101103

        串口工具:c-kermit

        Barebox:barebox-2013.11.0.tar.bz2

        吐槽一下ubuntu和基于ubuntu的linux mint,装了ubuntu之后,感觉用了unity之后虽然是很华丽,但是感觉无爱了,我不知道大家感觉是怎么样的,在我身边的小伙伴们我还没发现有谁真正完全只用linux系统的,平时我选择linux的原因仅仅只是工作需求而已,所以unity不是我的需求,你装就卡死我电脑,你妹的~

        再有linux mint,尼玛的桌面操作系统之王,我N个朋友装了都说不咋地,结果我不信邪,非要自己装了一遍,然后还是换回熟悉的xubuntu的LTS吧,稳定和习惯才是王道。

        直接的,解压barebox的源码包之后,修改一下makefile的compile部分

        

        然后cp arch\arm\configs\friendlyarm_tiny6410_defconfig到barebox的根目录成.config,跟编译linux的类似

        然后不做任何barebox的内核配置,直接make,先体验一下barebox

        

        用友善的板子的朋友都知道友善提供的minitool这个工具,步骤不讲了~我这里是2G的SD卡+友善的superboot从开发板启动,并用usb连上minitool,再次,因为原版的barebox不能从flash和SD卡启动,所以先直接下载到DDR里面跑,选择minitool的User Bin选项,把内存地址稍微改后一点点,这里我选择0x50200000,选择编译出来的barebox.bin

        


        然后,开一个terminal连上开发板的串口,我用的是c-kermit,用法不讲了,然后切到minitool里面点download,然后串口的信息就有log出来

        


        原版的barebox不用修改什么,uart和ethernet就可以正常工作,也因为这样,接下来修改barebox的内核,让barebox支持tftp服务,就可以直接从上位机load内核

        但是你一定要保证在你的linux中启动了tftp服务,怎么样装tftp服务,参考其他的blog吧,码字其实是很辛苦的,各位原谅哈~

        接下来,在barebox跑起来的情况下,我们手动mount上位机的tftp共享文件夹到barebox中,uboot有没有这种功能,我还真没试过,以前接触过一段时间uboot都是用很简单的功能而已。

        到barebox官网看看怎么用命令,其实barebox的命令基本和linux的类似,所以大家习惯了linux就习惯了barebox,这里只针对mount命令了

        


        然后官网还给了两个例子,来看一看:

        

        挺好的,原来挂在上位机的tftp之后可以直接boomt内核~是不是看到曙光了~

        那就来吧,比如说我搭建好的tftp共享目录是:

        /home/workspace/chanfai/tftpboot

        上位机的IP我设成静态的IP:192.168.1.100

        那根据mount的用法我就是这样的结果:

        mount 192.168.1.100:/home/workspace/chanfai/tftpboot tftp /mnt/tftp

        回到tiny6410跑起的barebox来,在mnt目录下mkdir出tftp文件夹,然后输入上面的mount命令,然后你切换到tftp目录里面,然后ls一下,你就会惊奇的发现,一个文件也没有,对的,你没看错,ls的结果是一个文件也没有,不要问我为什么会这样子,因为我也不知道,但是,重点来了,在你保证你上位机的tftp服务开启之后,在barebox的挂载就可以成功,不信,你试试直接cp在你上位机tftp共享文件夹里面的文件,比如说我在上位机的tftpboot中放了linux内核的镜像zImage,我在barebox中cp挂载之后的/mnt/tftp中到~/目录的过程是这样的:

        mkdir dev/

        cd dev/

        mkdir tftp  

        mount 192.168.1.100:/home/workspace/chanfai/tftpboot tftp /mnt/tftp

        cp mnt/tftp/zImage ~/

        ls

        

    

        清楚看到,挂载之后是看不到tftp目录下的文件的,但是,你cp出来是有结果的

        

        有木有和linux很相似,尼玛啊真的很像,相见恨晚啊卧槽

        然后在这里你把上面的步骤先做了~

        码字我码累了,抽根烟去先~

        Zzzzzzz......

        于是乎,过了很久~

        想必某些朋友真的会挺住,然后真的把上面的步骤先做了~

        这是可能的~

        这真是有可能的~

        这真心绝对有可能的~

        于是乎Zzzzzzz......

        那么我要恭喜你~到这里有可能是做不通的~原因是什么,因为barebox的内核我没有说明怎么去配置tftp服务,哇哈哈~

但是你们做之前有没有想过这其实是不可能通的呢,因为你都没确定你的bootloader支不支持tftp,或者对应的tftp服务开启没有,你就开始搞了~

所以,尽信博客还不如没博客~所以你们看我这么文字的时候要小心,我不知道什么时候心血来潮留个bug在里面让你们搞到蛋疼去~

        不说了,等会说多又都是泪了~进去barebox文件目录make menuconfig

        Filesystem support --->tftp support选上

        

        然后,commands -->file commands --->tftp选上

        


        再来,保存之后make,make完之后再用minitool工具download到板子内存里面跑~

        然后,我们要设置一下板子的ip,netmask,gateway,网卡的地址

        比如我的这样设置,在barebox起来之后,命令行输入:

        eth0.ipaddr=192.168.1.101

        eth0.ethaddr=12:34:56:78:90:ab

        eth0.gateway=192.168.1.254

        eth0.netmask=255.255.255.0

        保证板子ip和pc机在同一个网段上面~

        再然后,这时候你可以做上面的步骤了,这次可以保证你得到想要的结果了~

        然后我再跟你悄悄讲啊,其实呢,比如在tiny6410中,barebox把它的DDR内存虚拟成/dev目录下的ram0设备了,那也就说说,如果我们cp到的是/dev/ram0这个文件的话,就是把文件复制到内存里面了,哎呀卧槽,那这样不就可以从ram0里面跑起内核了么?答案是:这是必须的~

        然后接下来这样试

        cp /mnt/tftp/barebox.bin /dev/ram0

        go /dev/ram0

        到这里为止的实验留给尊贵的您做实验吧~


        这个部分开始是barebox启动linux内核的Log:

        

        

        

        至于load内核的部分,您可以尝试继续先做吧~要不你就先不看下面的想一下,会出现什么样的结果的~


        其实你们就不用多想了~linux的内核我重新自己配过了~而且,现在barebox这个BL还是有些小问题卡这你们的,放心,你照着做下去是不会得到上面的结果的,按照这些步骤必须得不到,会报机器码不识别的错误,到现在为止先体验一下barebox吧~

        下节我们来修改这个barebox的env环境变量和继续配置barebox的内核,然后在修改里面的某些小细节,然后达到boot通内核的结果~

        不过这里想一想,如果你们随便找个linux的镜像boot会产生什么结果~结果应该会很多的,至少我之前的摸索的时候碰到了好多问题~

        这里我不想抛出这些问题给你们,有问题,学着自己怎么了结它,我这里只是毫无技术含量的贴出成功的步骤~

原创粉丝点击