返回列表 发帖

[站长原创] 跟我学嵌入式基础知识篇 -开发板上运行第一个hello程序

[站长原创] 跟我学嵌入式基础知识篇 -开发板上运行第一个hello程序

开发板上运行第一个hello程序

嵌入式开发联盟www.mcuos.com

Osboy站长原创

QQ:82475491

Mcuos.com@gmail.com

(一)搭建开发板的开发环境

1.1)安装ubuntu的虚拟机

请参考文章:http://mcuos.com/thread-8227-1-1.html

1.2)安装交叉编译器工具链

请参考文章:http://mcuos.com/thread-8231-1-1.html

1.3)第一次编译linux内核

飞凌的光盘中:Linux-3.0.1\kernel_sourcecode3.0的代码:

FORLINX_linux-3.0.1.tar.gz

把它拷贝到在1.2章节中建立的ok6410目录,然后执行命令:


tar zxvf FORLINX_linux-3.0.1.tar.gz


解压缩出来的目录就是linux的内核代码了。

开始编译内核,执行命令:

Cd linux-3.0.1

输入make命令开始编译,直到编译结束后你可以进入:linux-3.0.1/arch/arm/boot

找到zImage文件,就是我们编译好的内核文件啦。


(二)制作跟文件系统

参考,跟文件系统目录:

http://mcuos.com/thread-8243-1-1.html


下载文件系统rootfs,拷贝到ok6410/filesystem目录,如果没有此目录则建立个:

Mkdir ok6410/filesystem

然后解压缩:

Sudo tar zxvf rootfs.tar.gz,生成了rootfs目录。


(三)Hack飞凌的linux3.0内核使其支持initramfs文件系统


为什么要hack内核?

因为飞凌默认值是的yaffs+nand的跟文件系统,烧写起来不方便,不适合我们初学者学习运行程序之类的事情,所以我们必须修改内核使其支持initramfs文件系统,这个文件系统其实可以和内核编译到一起,我们每次编译一次内核就可以内核和文件系统打包在一起了,这样我们直接下一个zImage内核就可以了。


特别注意:你如果在make menuconfig的时候碰到如下问题:



请在ubuntu主机上安装:

sudo apt-get install libncurses5-dev

然后出现如下画面就对了:


好的我们接下来看配置内核的具体步骤:

1)cd Linux-3.0.1

2make menuconfig

3General setup  --->


Initial RAM filesystem and RAM disk (initramfs/initrd) support

键盘上下键选择 à ()Initramfs source file(s),按下回车键,然后输入:../filesystem/rootfs,如图:



4)  Boot options  --->

(console=ttySAC0 root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc) Default kernel command string

按回车键,然后修改为:

root=/dev/ram0 console=ttySAC0,115200n8 rdinit=/sbin/init

注意这里的boot参数不起作用,因为飞凌的uboot默认是传的参数给kernel,会覆盖掉这里的参数,所以我们回头要把uboot的传参数功能去掉。

当系统启动到uboot的时候,赶紧按空格键,使系统停留在uboot的命令行,然后输入printenv查看,类似的boot参数,然后把原来的参数,修改成为我们的:root=/dev/ram0 console=ttySAC0,115200n8 rdinit=/sbin/init,就可以了。

5Device Drivers  --->

上下键操作到

Block devices  --->,这一行,然后按空格键选择,如果是星号代表选择上,为空表示没选择。然后再下回车键进入:

注意,这里要按两次空格键,<*>,如果是<M>你就少按了此空格键,这个代表编译模块了,这个比较复杂,我们目前用不到动态模块加载。



6)键盘的左右键选择exit退出,



7)输入make重新编译内核

(四)如果你自己Hack飞凌的linux3.0内核无法运行起来,请直接使用我的内核配置文件


下载:

本帖隐藏的内容需要回复才可以浏览


然后拷贝到内核的arch/arm/configs/目录下面。在输入make编译内核之前,要做的事情是:make mcuos_6410_build_defconfig,这个步骤就是怕你自己配置的内核有问题,直接使用我的默认的内核配置,我这个配置我测试好的,能用的。


(五)烧写内核到nand

过程请参考:http://mcuos.com/thread-8168-1-1.html

和飞凌的烧写zImagenand中的文档。然后运行看看。


(六)编写第一个hello程序

helloworld.c


#include <stdio.h>


int main() {


       printf("helloworld!\n");

       return 0;


}


然后arm-linux-gcc helloworld.c -o hello -static,生成了hello文件。

请把hello文件拷贝到:在(二)中建立的rootfs/bin目录下面。然后重新编译内核。


生成了zImage后重新烧写到nand中启动,等进入到了shell命令中后,进入bin目录下查看有无hello这个程序,然后执行hello,看看是不是输出:helloworld


Ok啦,第一个程序跑起来了。


上面所有的操作都正确了,helloworld也打印出来了,那么你从这个实验里面应该想到点什么呢?

请参考我的下一篇帖子:

跟我学嵌入式基础知识篇 - 第一个hello程序实验之后你应该学习到的知识点

附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

等的就是这个,呵呵…………。

TOP

尝试着把系统装上

TOP

尝试着把系统装上
lpyoung 发表于 2012-5-22 22:31



   恩,你也可以写些心得体会的哦,有啥不明白的可以大家讨论下哦。

TOP

仔细学习 。。。

TOP

认真学习 谢谢师父

TOP

     心痒呀!!!

TOP

试试老大的这个,查查我的问题看

TOP

请教问题 :
arm-linux-gcc helloworld.c -o hello -static

请问上面一句的命令中-static 是代表什么意思?有什么作用?

TOP

回复 9# Sunrier


   用静态库编译,它里面分为动态库和静态库。不过那个选项貌似不是这样用的我没试过加在最后面,一般都是
arm-linux-gcc -static hello.c -o hello

TOP

回复  Sunrier


   用静态库编译,它里面分为动态库和静态库。不过那个选项貌似不是这样用的我没试过加在 ...
-Rain 发表于 2012-6-8 12:25



   这种命令行写在哪里无所谓的,没有规定必须这个命令参数放置顺序的。

TOP

回复 11# osboy


    哦,这样啊。我试试

TOP

过两天就可以i拿到板子了,先预习下,呵呵。

TOP

作出来了,mark下

TOP

好仔细,顶

TOP

好仔细,顶

TOP

认真看看

TOP

感谢楼主分享 非常好的资料

TOP

过来看看。学习中

TOP

感谢楼主的分享

TOP

自己Hack飞凌的linux3.0内核无法运行起来,试试老大的

TOP

本帖最后由 cc2011cc 于 2012-10-15 20:46 编辑

回复 1# osboy


    师傅,我编译的arm-hello程序咋运行不起来呢?
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

TOP

回复  osboy


    师傅,我编译的arm-hello程序咋运行不起来呢?
cc2011cc 发表于 2012-10-15 20:44



    问题解决了,发现是用错了编译器,应该用4.3.2里面的编译,可是我用的是4.2.2-eabi。这两个编译器有啥区别呢?

TOP

问题解决了,发现是用错了编译器,应该用4.3.2里面的编译,可是我用的是4.2.2-eabi。这两个编译器有 ...
cc2011cc 发表于 2012-10-15 21:17



   只要都是arm的编译器就应该没太大问题的哦,只是gcc的版本和c库的版本不同而已啊。

TOP

非常感谢董事长~~~~~~~~~

TOP

看下隐藏~~弄了之后无法编译啦!

TOP

恢复看看白

TOP

因为是新手,所以帖子里面总会有些地方不理解,我总是在学习一段时间之后,从新读一遍老大的帖子,发现每次读一遍总会有收获啊!

TOP

因为是新手,所以帖子里面总会有些地方不理解,我总是在学习一段时间之后,从新读一遍老大的帖子,发现每次 ...
luomuxiaoxiao98 发表于 2012-11-10 19:30



  很好,看来掌握了学习方法了,很好的开始。

TOP

楼主牛人,学习了,谢谢

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服