免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7075 | 回复: 7
打印 上一主题 下一主题

[应用] 嵌入式中怎么将应用程序代码编写进内核并且生成一个镜像文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-09 10:05 |只看该作者 |倒序浏览
问题是这样的,我研究控制板子的某个LED的亮灭,现在我能够将内核镜像烧写到板子后,通过Secure CRT连接到板子后,通过命令 echo > 1 gpio 点亮LED;echo > 2 gpio 熄灭LED; echo > 3 gpio;LED闪烁

现在我想做个应用程序at来控制它,比如要点亮LED,输入at gpio 1就可以了,代码如下:
int main(int argc, char** argv)
{
        if (0)
        {
                int i = 0;
                for(i = 0; i < argc ; i++)
                {
                        printf("\r\n argv[%d]=[%s],__[%s-%u]\r\n", i , argv[i], __FILE__, __LINE__);
                }
        }
       
        if (argc < 2)        
        {
                goto err;
        }
       
        if (!strcmp(argv[1], "gpio")
                        && argc == 3)
        {
                if (!strcmp(argv[2], "0"))
                {
                        system("/bin/echo 0 > /proc/gpio");
                       
                        return 0;
                }
                else if (!strcmp(argv[2], "1"))
                {
                        system("/bin/echo 1 > /proc/gpio");
                       
                        return 0;
                }
                else if (!strcmp(argv[2], "2"))
                {
                        system("/bin/echo 2 > /proc/gpio");
                       
                        return 0;
                }
                else
                {
                        goto err;
                }
        }
我就想知道,我现在应该把这段代码放在哪里,或者说怎么写对应的makefile来使得把这段代码能够编译完以后在内核镜像内。

论坛徽章:
0
2 [报告]
发表于 2011-10-09 16:59 |只看该作者
请搞清楚内核映像,文件系统,我觉得想你写的程序可以放到文件系统中去。

论坛徽章:
0
3 [报告]
发表于 2011-10-10 09:34 |只看该作者
回复 2# cuweike


    嗯,想了一下,的确应该是放到文件系统里面去,不过不知道怎么去做,文件系统那块不是很了解

论坛徽章:
0
4 [报告]
发表于 2011-10-10 09:36 |只看该作者
放在文件系统里,开机自动加载。或者加到内核中试试看

论坛徽章:
0
5 [报告]
发表于 2011-10-10 12:43 |只看该作者
我觉得你这个编译成可执行档放在文件系统没有实际意义。
原因: 执行你的这个程序跟"/bin/echo 0 > /proc/gpio" 不是一回事吗?

还是回答一下怎么编译进内核镜像的问题。
1. 内核镜像分为2部分 linux kernel内核 + file sysytem文件系统
   a. 一般驱动会以module 或者 直接编译进kernel.
        Module有固定的格式, 可以实时insert, remove
        直接编译进kernel, 就需要改kernel 代码, makefile.

     b. application 及上层代码一般放入 file sysytem.

2. 从你这个需求来看, 实际是属于驱动的, 做成module比较好。
  但是你已经做成了 application, 那我就说一下application 怎么放进 file system.   

3.  编译application, 需要找到或者编译chip对应的gcc tool(arm, mips...)
     然后gcc编译, 如果要写makefile, 也差不多。
   最简单的是可以用tftp就放进你现在的file system, 然后执行。
   
   如果你知道怎么编译file sysytem, 那就更加好, 直接放进去就可。

其实, 你如果有kernel 和 filesystem的 source code, 这个过程会非常简单。
祝你好运!

论坛徽章:
0
6 [报告]
发表于 2011-10-10 12:57 |只看该作者
回复 5# yayupg


    首先先谢谢你如此耐心地帮我解答,我提问的目的就是想学习怎么把一个应用程序编译到文件系统里面,我有关于这款chip的SDK,但我对文件系统的方面还不是很清楚 下图就是我的SDK包的构成,里面有bootload与内核源码,文件系统的在哪,我没有找到。

论坛徽章:
0
7 [报告]
发表于 2011-10-10 13:00 |只看该作者
回复 5# yayupg


    还要你说要是有source code会很容易的完成,我也有关于at这个程序的源码和Makefile
    #CC         = mips-uclibc-gcc
COPT         = -Os  
CFLAGS         = ${COPT}  
ifeq ($(CONFIG_RSDK_rsdk-1.5.0-4181-EB-2.6.30-0.9.30.2),y)
CFLAGS += -mips16
endif
ifeq ($(CONFIG_RSDK_rsdk-1.5.0-4181-EB-2.6.30-0.9.30.3),y)
CFLAGS += -mips16
endif
LDFLAGS         =  
#STRIP         = mips-uclibc-strip
include ../../linux-2.6.30/.config
ifeq ($(RTL8186_TR),1)
CFLAGS+=-DCONFIG_RTL8186_TR  
endif

ifeq ($(CONFIG_RTL865X_SC),1)
CFLAGS+=-DCONFIG_RTL865X_SC  
endif

ifeq ($(RTL8186_KB),1)
CFLAGS+=-DCONFIG_RTL8186_KB
endif

ifeq ($(CONFIG_RTL_8196B),y)
CFLAGS+=-DCONFIG_RTL_8196B
endif

ifeq ($(CONFIG_RTL_8196C),y)
CFLAGS+=-DCONFIG_RTL_8196C
endif

ifeq ($(CONFIG_RTL_819,y)
CFLAGS+=-DCONFIG_RTL_8198
endif

CFLAGS += $(EXTRA_CFLAGS)

all: at
#        -ctags *.[ch]

clean:
rm -f at tags *.o  

sources = at.c

at:        $(sources:.c=.o)
$(CC) $(LDFLAGS) $(LIBS) $^ -o $@       
$(STRIP) $@

romfs:
$(ROMFSINST) at /bin/at

论坛徽章:
0
8 [报告]
发表于 2011-10-13 15:14 |只看该作者
我看了一下你的目录应该是kernel 的, 外层没有其他的source code吗
上面有提到 kernel和 rootfs是独立的.
如果没有就麻烦一点,需要自己建立, 不是一两句话就能说清楚的, 你找一本基础的书看一下吧!

http://wenku.baidu.com/view/8aa0924f767f5acfa1c7cdbd.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP