linux下如何把一个.c文件通过arm-none-eabi-交叉编译生成一个.bin的文件然后在qemu上运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下如何把一个.c文件通过arm-none-eabi-交叉编译生成一个.bin的文件然后在qemu上运行相关的知识,希望对你有一定的参考价值。
如题,向内核注册一个虚拟的字符设备驱动,现在已经能运行在linux下,请问如何编辑makefile生成能运行在qemu下的文件格式?
参考技术A eabi标准的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一个链接终于,郁闷已久的问题攻破了,用了三种配置交叉编译的方法,最终在开发板上实现成功了,现在想一想,有的时候真的也是运气。
之前已经试验过使用arm-linux-gcc-3.4.1配置交叉编译编译环境,配置成功了,在开发板上失败了~
后来使用脚本创建交叉编译环境(crosstool-0.43),配置成功了(这个用了相当长的时间),在开发板上失败了~ 参考技术B 需要设置内核源码树,即你makefile中的KDIR
交叉编译的话,要设置
ARCH
CROSS_COMPILE
两个变量。
make就可以了。
linux下c通过虚拟地址映射读写文件的代码
在代码过程中中,把开发过程中比较好的一些代码片段记录起来,如下的代码内容是关于 linux下c通过虚拟地址映射读写文件的代码,应该对小伙伴有些好处。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<string.h>
#include<sys/mman.h>
struct stu
{
char name[20];
int age;
float score;
};
main()
{
int fd;
struct stat st;
int size;
int count;
struct stu record;
memset(&record,0,sizeof(struct stu));
fd=open("newstu.dat",O_RDWR|O_CREAT|O_EXCL,0666);
if(fd==-1)
{
fd=open("newstu.dat",O_RDWR);
if(fd==-1) printf("::%mn"),exit(-1);
}
fstat(fd,&st);
count=size/sizeof(struct stu);
s=mmap(0,size+sizeof(struct stu),
PROT_READ|PROT_WRITE,
MAP_SHARED,fd,0);
printf("输入姓名:");
scanf("%s",s[count].name);
printf("输入年龄:");
scanf("%s",&(s[count].age));
printf("输入分数:");
scanf("%f",&(s[count].score));
int i;
for(i=0;i<count-1;i++)
{
printf("%s,%d,%.2fn",s[i].name,s[i].age,s[i].score);
}
munmap(s,size+sizeof(struct stu));
close(fd);
}
以上是关于linux下如何把一个.c文件通过arm-none-eabi-交叉编译生成一个.bin的文件然后在qemu上运行的主要内容,如果未能解决你的问题,请参考以下文章