2009年3月30日星期一
2009年3月18日星期三
ARM Linux 时钟驱动流程
各个平台在自己定义的时钟中断处理函数中调用timer_tick
这个函数在arm/kernel/time.c中定义。它会调用:do_timer函数,这个函数在linux内核中定义(timer.c)
如果不是smp系统,还会调用update_process_times函数。
2009年3月14日星期六
使用qemu调试arm linux内核
1.准备
安装qemu
下载内核文件 这里用2.6.27
建立交叉编译环境。
2.获取编译内核用的config文件
从qemu网站下载测试qemu用的文件http://www.nongnu.org/qemu/linux-user-test-0.3.tar.gz
tar zxvf linux-user-test-0.3.tar.gz
解压后,可以看到3个文件:arm_root.img zImage.integrator README
假设解压后的文件放在 /qemu-test目录下
在内核源代码的根目录下执行
./scripts/extract-ikconfig /qemu-test/zImage.integrator > qemu-linux_defconfig
结束后,将生成一个qemu-linux_defconfig配置文件
3.编译内核
cp qemu-linux_defconfig .config
make zImage
4.用qemu启动内核
qemu-system-arm -kernel zImage -initrd /qemu-test/arm_root.img / -redir tcp:9999::9999 -s -S
5.用gdb调试内核
假设运行qemu的机器的ip地址是192.168.1.5
arm-eabi-gdb vmlinux
在gdb的提示符下运行下面的命令:
target remote 192.168.1.5:1234
这时候就可以调试内核了。
比如设置断点
break start_kernel
查看寄存器
info registers
等等。。。
安装qemu
下载内核文件 这里用2.6.27
建立交叉编译环境。
2.获取编译内核用的config文件
从qemu网站下载测试qemu用的文件http://www.nongnu.org/qemu/linux-user-test-0.3.tar.gz
tar zxvf linux-user-test-0.3.tar.gz
解压后,可以看到3个文件:arm_root.img zImage.integrator README
假设解压后的文件放在 /qemu-test目录下
在内核源代码的根目录下执行
./scripts/extract-ikconfig /qemu-test/zImage.integrator > qemu-linux_defconfig
结束后,将生成一个qemu-linux_defconfig配置文件
3.编译内核
cp qemu-linux_defconfig .config
make zImage
4.用qemu启动内核
qemu-system-arm -kernel zImage -initrd /qemu-test/arm_root.img / -redir tcp:9999::9999 -s -S
5.用gdb调试内核
假设运行qemu的机器的ip地址是192.168.1.5
arm-eabi-gdb vmlinux
在gdb的提示符下运行下面的命令:
target remote 192.168.1.5:1234
这时候就可以调试内核了。
比如设置断点
break start_kernel
查看寄存器
info registers
等等。。。
2009年3月1日星期日
用android build system 编译自己的init
在system文件夹下
建立一个myinit文件夹
编辑一个init.c文件
代码如下
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int i = 0;
while (1)
{
printf("hello world (%d)",i++);
sleep(2);
}
return 0;
}
另外建立一个Android.mk 文件,内容如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
init.c
LOCAL_MODULE:= init
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED)
LOCAL_STATIC_LIBRARIES := libcutils libc
#LOCAL_STATIC_LIBRARIES := libcutils libc libminui libpixelflinger_static
#LOCAL_STATIC_LIBRARIES += libminzip libunz libamend libmtdutils libmincrypt
#LOCAL_STATIC_LIBRARIES += libstdc++_static
include $(BUILD_EXECUTABLE)
在myinit文件夹下输入mm,
编译系统就会自动输出一个编译好的init程序
输出的路径也会提示出来。
建立一个myinit文件夹
编辑一个init.c文件
代码如下
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int i = 0;
while (1)
{
printf("hello world (%d)",i++);
sleep(2);
}
return 0;
}
另外建立一个Android.mk 文件,内容如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
init.c
LOCAL_MODULE:= init
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED)
LOCAL_STATIC_LIBRARIES := libcutils libc
#LOCAL_STATIC_LIBRARIES := libcutils libc libminui libpixelflinger_static
#LOCAL_STATIC_LIBRARIES += libminzip libunz libamend libmtdutils libmincrypt
#LOCAL_STATIC_LIBRARIES += libstdc++_static
include $(BUILD_EXECUTABLE)
在myinit文件夹下输入mm,
编译系统就会自动输出一个编译好的init程序
输出的路径也会提示出来。
用android build system 编译一个最小的android平台
首先按照
http://source.android.com/download
这个网站的方法配置系统
然后下载android平台文件
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync
在平台所在文件夹下运行
. build/envsetup.sh
然后运行
在build/core/main.mk文件中的
ifeq ($SDK_ONLY),true)行前面
添加SDK_ONLY := false
BUILD_TINY_ANDROID := true
保存。
在平台所在文件夹下,运行mm,系统将自动编译整个平台。
所生成的文件的存放路径也会提示出来。
如果提示和libpixelflinger 与hardware_legacy依赖相关的错误,
则修改
Android.mk中的LOCAL_SHARED_LIBRARIES
将hardware_legacy行去掉。
http://source.android.com/download
这个网站的方法配置系统
然后下载android平台文件
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync
在平台所在文件夹下运行
. build/envsetup.sh
然后运行
在build/core/main.mk文件中的
ifeq ($SDK_ONLY),true)行前面
添加SDK_ONLY := false
BUILD_TINY_ANDROID := true
保存。
在平台所在文件夹下,运行mm,系统将自动编译整个平台。
所生成的文件的存放路径也会提示出来。
如果提示和libpixelflinger 与hardware_legacy依赖相关的错误,
则修改
Android.mk中的LOCAL_SHARED_LIBRARIES
将hardware_legacy行去掉。
订阅:
博文 (Atom)