⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hello_world编入内核笔记.txt

📁 helloworld 程序编入内核解释
💻 TXT
字号:
搞定UCLINUX移植以后就开始整个最小的程序吧,当然是HELLOWORLD了:)
一 先写个helloworld.c (对于小代码我喜欢先在WINDOW下建个“新建 文本文档.txt”再在里面写代码,然后保存后改名成helloworld.c 注意的是扩展名也要从TXT改成C才行,原来说过,不多说了)
里面写下面等号里的代码:
==================
#i nclude <stdlib.h>
#i nclude <stdio.h>

int main(void)
{
 printf("hello world ! I got it!\n");
 return 0;
}
==================
不用解释了吧:)

二 然后编写个makefile吧,别总用arm-elf-gcc了。
为以后编写大规模程序打个基础:)
建个makefile(和前面一样,先TXT然后改名,没有扩展名)
=====================
EXEC = helloworld
OBJS = helloworld.o

all: $(EXEC)
$(EXEC): $(OBJS)
 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)

romfs:
 $(ROMFSINST) /bin/$(EXEC)
clean:
 rm -f $(EXEC) *.elf *.gdb *.o
======================
基本能看明白吧?MAKE的语法比较复杂,就不多讲了,可以看我在前几篇笔记里推荐的ZLG那本书。但幸运的是基本不用自己动手了,LINUX源代码里有很多MAKE 拿来改改吧:)

三 下面就是有朋友问我怎么把程序下到板子里了
一般说来有几种方法。
1 板子挂载宿主机的NFS共享目录,把程序拷贝到/tmp目录(在RAM里)测试一下,但缺点是掉电要消失,只适合做调试时用。
2 做JFFS之类的日志文件系统,和上面一样NFS挂载拷贝过来,JFFS文件系统可以保证掉电不消失,类似U盘里拷贝程序(只是结果类似,原理完全不同)。
3 直接把程序烧写进ROMFS文件系统,这里就只介绍这种。原因有两点 首先 我还没学怎么做JFFS,其次 我还没学怎么做JFFS。哈哈
好了,那开工。

1)在uClinux-dist/user/下建立目录hello
把helloworld.c和makefile拷贝到里面,怎么拷贝不用说了吧?VMWARE-TOOLS共享文件夹吧。

2)修改uClinux-dist/user/makefile

在适当位置 找一行(这句语法扎堆的地方)加
dir_$(CONFIG_USER_HELLO)               += hello

3)记住CONFIG_USER_HELLO这个名(自己可以改的 )
在uClinux-dist/config/Configure.help里加(扎堆)下面两行
CONFIG_USER_HELLO
  Only print hello world
上面是名(和前面必须一致)下面是注释

4)改uClinux-dist/config/Configure.in里按照扎堆的原则加下面几行
#############################################################################
mainmenu_option next_comment
comment 'Hello World'
bool 'demo' CONFIG_USER_MYAPP_DEMO
endmenu
#############################################################################
#号中间加的就是语法了,基本意思就是在Hello World--->下加个[]demo
编译过内核的都熟悉吧:)

5)像编译内核一样编译了
进内核源代码目录,比如uClinux-dist
make menucinfig
把主菜单选好了,不用说了吧?我的编译内核笔记里有,当然如果不想修改内核就只选上以下这个
Kernel/Library/Defaults Selection  --->[*] Customize Kernel Settings (NEW)
意思是修改USER程序
EXIT 保存
然后在Customize Kernel Settings菜单里最后会出现Hello World--->
回车进去以后看见[]demo了吧?
选上

EXIT 保存

6)编译
几大命令~~~
make dep
make clean
make lib_only
make user_only
make romfs
make
之后在生成uClinux-dist/image下有了uclinux_rom.bin

7)烧写到板子里
板子里有UBOOT了吧?
顺序做下面步骤(我在UBOOT编译笔记里写过,再写一次)
A:loadb 0xc500000
B:发送(KERMIT协议)uclinux_rom.bin
C:erase 0x50000 0x1fffff
D:cp 0xc500000 0x50000 文件大小
注意:文件大小就是在传输完uclinux_rom.bin后显示的数字 0X开头=什么的那个0X数字
比如提示是0X0012a7f1=1222641
就0X0012a7f1/4+2=0x4A9FE命令就是:cp 0xc500000 0x50000 0x4A9FE
E:重起板子 就进UCLINUX了


8)板子进到/bin下 看是不是有个helloworld?
执行它就看见“hello world ! I got it!”
注意:因为把文件编写到内核了,所以不是用./helloworld
直接在任何目录下写helloworld就行

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -