arm系统启动后运行 helloworld ("hello world" 被封装为ramdisk)

原创 2015年07月07日 16:51:23
----------------------------------------
arm系统启动后运行 helloworld
----------------------------------------
编译环境:arm交叉环境:

1. 交叉编译linux 内核。 注意make 时, ARCH=arm

   交叉编译前缀为 CROSS_COMPILE=arm-none-linux-gnueabi-

   建议直接修改Makefile, 修改ARCH, CROSS_COMPILE 变量为:

  ARCH        ?= arm
CROSS_COMPILE   ?= arm-none-linux-gnueabi-


 make defconfig 或者 make versatile_defconfig

 此时make 会生成 arch/arm/boot/zImage, 但这个内核文件运行时会出问题:

:Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004


解决办法:重新配置内核支持EABI

make clean

make menuconfigKernel Features  --->
     [*] Use the ARM EABI to compile the kernel
     [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL)

为什么出现这个问题没有深究,也许是qemu或者代码本身问题,这样解决也就可以了。



2. 编译一个arm 执行程序hello
    参考:http://blog.csdn.net/hejinjing_tom_com/article/details/46788283

3. 令内核启动完成后跳入hello

甲: 将hello打包为ramfs
$ echo hello | cpio -o --format=newc > initramfs

乙: 模拟运行
$ qemu-system-arm -M versatilepb -kernel zImage -initrd initramfs -append "root=/dev/ram rdinit=/hello"
root=/dev/ram 指明根文件系统在ram, -initrd 模拟根文件系统。 rdinit= ... 第一个运行程序


$ qemu-system-arm -M versatilepb -kernel zImage -initrd initramfs -nographic -append "root=/dev/ram rdinit=/hello console=ttyAMA0"

这里模拟了串口,控制台输出从那个挺难看的小窗口挪到了本地,字体好看多了。

-nographic      disable graphical output and redirect serial I/Os to console


Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
smc91x smc91x.0 eth0: SMC91C11xFD (rev 1) at c89c8000 IRQ 57
 [nowait]
smc91x smc91x.0 eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP: cubic registered
NET: Registered protocol family 17
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Freeing unused kernel memory: 124K (c03c2000 - c03e1000)
---------- hello qemu ------------
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input2

(qemu)

hello qemu 出来的真不容易!
版权声明:本文为博主原创文章,未经博主允许不得转载。

linux 交叉编译的HelloWorld【1】

日期:2016-04-02        起因刚好最近三天假期可以玩玩Linux。就是将一个fedora下文件发送到Arm9的下的系统下进行运行。也许会问为何不直接用Arm9上的系统来编译呢,实际上板...
  • zhjmyx
  • zhjmyx
  • 2016年04月02日 20:27
  • 3042

吐血简述在arm-linux上编译helloworld时候的抓狂经历

转自:http://blog.csdn.net/samantha_sun/article/details/6428285 想在我的fl2440上运行一个helloworld,在三、五个月前,...
  • hjwang1
  • hjwang1
  • 2013年12月03日 14:31
  • 1291

GNU ARM汇编--(二)汇编编译链接与运行

GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对...
  • dndxhej
  • dndxhej
  • 2012年04月26日 22:28
  • 13967

AM335x(TQ335x)学习笔记——USB驱动移植

对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能。废话少说,直接动手开启AM335x的USB驱动配置项。 Step1....
  • girlkoo
  • girlkoo
  • 2014年12月26日 22:33
  • 11741

<ARM嵌入式开发学习>我的第一个驱动程序-hello world

第一次接触ARM开发板,整整用了一天才把板子原来的wince系统烧写为Linux,其中就卡在制作SD卡启动的时候,使用的是8G的卡,结果官方提供的制作软件不支持~~~~     使用的开发板子:TQ2...
  • GQB1226
  • GQB1226
  • 2015年04月23日 19:43
  • 889

一个Hello World的Arm汇编指令

源码 #include #include int main() {     int a = 1;     int b = 2;     printf("hello %d, %d", a, b)...
  • demonshir
  • demonshir
  • 2016年09月21日 21:48
  • 175

汇编程序输出“Hello world”

学了一个学期的汇编了,该复习复习了。大后天就要开始开微机原理了。先那把些上机做过的题再拿出来写写~ 在DOS窗口上面输出“Hello world” 程序如下: DATA SEGME...
  • xiongyaoqiongyao
  • xiongyaoqiongyao
  • 2012年12月30日 09:31
  • 8243

第一个可运行的PHP程序-从配置到HELLO WORLD

好久以前就想看看PHP的东西了,说实话,今天花了这么长的时间才摸索运行出来了PHP真的有点汗颜。最开始想用PHP是想自己多了解点东西,不知道现在却才搭建起来环境,虽然大致了解一点点基础的东西,不过还是...
  • sebatinsky
  • sebatinsky
  • 2009年07月20日 14:57
  • 24896

用Python编写运行Hello World程序

简介         我们将看一下如何用Python编写运行一个传统的“Hello World”程序。通过它,你将学会如何编写、保存和运行Python程序。         有两种使用Python运行...
  • pjeby
  • pjeby
  • 2006年09月12日 13:10
  • 40770

JDk的经典安装和HelloWorld的编写运行

JDk的经典安装和HelloWorld的编写运行
  • qq_27523255
  • qq_27523255
  • 2015年11月27日 15:07
  • 984
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:arm系统启动后运行 helloworld ("hello world" 被封装为ramdisk)
举报原因:
原因补充:

(最多只允许输入30个字)