嵌入式系统嵌入c程序.docx
《嵌入式系统嵌入c程序.docx》由会员分享,可在线阅读,更多相关《嵌入式系统嵌入c程序.docx(10页珍藏版)》请在冰豆网上搜索。
嵌入式系统嵌入c程序
安阳师范学院计算机与信息工程学院
《嵌入式系统》
课程设计
实践选题:
嵌入式系统嵌入c程序
专业班级:
指导教师:
姓名学号:
成绩评定:
题目:
嵌入式系统嵌入c程序
一、问题描述及分析
设计裁剪镜像,设计文件镜像系统,文件镜像系统的整套文件目录,内核zImage文件的烧写,文件系统的烧写,自己的c程序放入到文件目录中去,我们做的是十进制数字转化成二进制数字。
二、课程设计内容
1、系统结构与软件设计流
2、任务分工
XXX:
总体设计,框架设计根文件系统的生成,嵌入式程序的设计。
XXX:
引导装载程序(BOOTLOADER)移植,Linux内核移植与编译。
XXX:
资料搜集与整理,文件系统烧写,内核裁剪。
3、软件操作说明
VM虚拟机安装,Redfiag系统安装,linux操作环境搭建,开发板系统搭建,内核及文件系统烧写。
运行嵌入的c程序。
a建立根文件系统的初始文件
建立目录bin、dev、etc、lib、proc、sbin、usr、home、mnt等;
cd/dev
cp-aconsolenullttytty0tty1tty2ttyS0ttyS1/home/long
b.移植文件
/up-techpxa270/arm-linux-tools/gcc-3.4.6-glibc-2.3.6/arm-linux/arm-linux,因此移植库文件的过程为
cd/up-techpxa270/arm-linux-tools/gcc-3.4.6-glibc-2.3.6/arm-linux/arm-linux/lib
cplibc.so.6ld-linux.so.2/home/long/lib
c.配置文件。
配置文件也可以由busybox生成,因此这一步我们也留待后面再做。
1.安装和使用busybox
(1)解压busybox
(2)配置busybox
运行makemenuconfig,
GeneralConfiguration→
[*]UsethedevptsfilesystemforUnix98PTYs
BuildOptions→
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
[*]DoyouwanttobuildBusyBoxwithaCrossCompiler?
选择交叉编译(/usr/local/arm-linux/bin/arm-linux-)CrossCompilerprefix回车将路径改为arm-linux-
InstallationOptions→[]Don'tuse/usr
InitUtilities→全都不要
Login/PasswordManagementUtilities→全都不要
NetworkingUtilities→[]route
(3)安装busybox
make
makeinstall
(4)移植文件
进入busybox根目录,找到_install目录,将其中的bin、usr、sbin目录拷贝至开发板根文件系统,并覆盖其中的同名目录。
然后打开目录examples/bootfloppy,将其中的etc目录拷贝至开发板根文件系统,并覆盖其中的同名目录。
至此,开发板根文件系统就做好了,由于有了libc.so.6ld-linux.so.2这两个库文件的支持,我们可以在开发板上运行编译好的C语言程序。
cp-abinusrsbin/home/long
cdexamples/bootfloppy
cp-aetc/home/long
(5)生成文件系统镜像文件
./mkfs.jffs2-rroot-orootfs.img-e0x20000--pad=0xd00000
4、主要实现方法
开发环境:
Redflaglinux,博创科技UP-TECHPXA270
编译环境:
linux虚拟机下运用gcc,交叉编译器arm-linux-gcc。
运行环境描述:
博创科技UP-TECHPXA270嵌入式Linux开发板。
SecureCRT5.1。
主要技术要点:
在嵌入式开发板上实现十进制到二进制的转换。
具体截图实现:
Linux预运行程序
三、课程设计总结
课程设计我们通过自己的实践,对书嵌入式开发知识的实际运用能力和经验得到了提升,进一步加深对知识的理解。
并且我们的十进制转二进制中,主要应用了嵌入式系统的搭建中的根文件装载引导程序、内核裁剪和嵌入式linux根文件系统的制作,以及嵌入式控制台程序的编写和调试等知识。
让我们对嵌入式系统的开发流程得到了更加清晰地认识。
四、存在问题及改进措施
在嵌入式系统环境搭建和编写程序的过程中,也出现了很多错误。
比如:
A.内核连接不上,镜像也连接不上。
网络设置有问题。
b.根文件系统设计及生成过程中驱动程序包含不完全,导致烧写完成后系统没有反应,硬件驱动补充完整后,正常运行;
c.在烧写内核和根文件系统时,由于网络配置问题,IP地址配置不正确,导致tftp传输协议传输超时,最终传输失败,通过禁用其他无关网卡后得到解决。
d.根文件系统镜像未按照嵌入式文件格式生成镜像导致无法烧写成功。
通过将生成代码的语句补充完整后,解决问题。
e.最后,在源程序中由于目标机与宿主机的编码格式不同,导致程序输出汉字为乱码,影响最终效果,将元提示信息改为英文后解决,但仍有部分英文显示还有乱码,这是不足之处。
五、源代码
#include
intmain(void)
{
inti,j,num,test;
test=1;
test<<=31;
printf("十进制数字转化为二进制数\n");
printf("请输入数字:
\n");
scanf("%d",&num);
printf("所对应的二进制数字为:
\n");
for(i=1;i<=32;i++){
j=(test&num)?
1:
0;
printf("%d",j);
num<<=1;
if(i%4==0)
printf("\n");
}
puts("\n");
printf("MADEBYCIKETIANLONG!
");
puts("\n");
}
~
~
~
~
~
~
"long.c"23L,464C