/**************************************************************************************/
內核源碼的查看方法:
1.刪除linux-3.5-for-look/arch/arm/所無關於三星的代碼。由於這個內核支持的芯片比較多,咱們學得是arm,查詢的時候防止查詢到其餘平臺的代碼,因此精簡一下代碼。
2.ctags -R .
3.vim -t memcpy
4.vim 命令行模式下:cstag memcpy
5.ctrl + ] :進入
6.ctrl + o :退出
/**************************************************************************************/
在內核中添加本身的代碼:
1.驅動能夠直接編譯到內核。
2.或者編譯成模塊,而後須要的時候在安裝。
3.mkdir linux-3.5/Driver/mydriver
4.建立一下幾個文件:my.c Makefile
my.c中代碼:
1 #include <linux/init.h>
2 #include <linux/module.h>
3 #include <linux/sched.h>
4 //在內核啓動過程當中執行,且在內核啓動過程當中執行的函數類型是固定的:int test_init(void) :返回值和行>>
參是固定的。
5 //init 段:這個函數被放到init段,好處是代碼執行完成以後,函數體就釋放了,節省一部份內存。只能調用>>
一次。後面不要調用了。
6 static __init int test_init(void)
7 {
8 int i;
9 //若是資源申請失敗,要飯會相應的錯誤嗎
10 //
11 //return -ENOMEM;內存申請失敗
12 for(i=0;i<20;i++)
13 {
14 printk("hello kernel\n");
15 }
16 //printf("") //>> 1
17 return 0;
18
19 }
20 //把test_init函數放到內核啓動過程當中執行
21 module_init(test_init);
22 MODULE_LICENSE("GPL"); //這個是代碼遵循GPL開源規則,之後誰要是用了咱們寫的代碼,也必需要遵循GPL規則。
23 //下面三行無關緊要
24 MODULE_AUTHOR("LIUYE");
25 MODULE_VERSION("V1.0");
26 MODULE_DESCRIPTION("test for class");
Makefile:
obj-y += my.o
vim ../Makefile 上一層makefile中添加下層Makefile的信息,makefile是分層編譯的結構,上層malefile記錄下層的makefile信息,才能正確編譯。
obj-y += mydriver/ 這裏必定要有「/」,由於這裏是一個目錄
以後就可退出到linux-3.5/ make -j4
[liuye@LiuYe linux-3.5]$>make -j4
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC drivers/mydriver/my.o
LD drivers/mydriver/built-in.o
LD drivers/built-in.o
LINK vmlinux
LD vmlinux.o
MODPOST vmlinux.o
WARNING: modpost: Found 9 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
KSYM .tmp_kallsyms1.o
KSYM .tmp_kallsyms2.o
LD vmlinux
SYSMAP System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
GZIP arch/arm/boot/compressed/piggy.gzip
AS arch/arm/boot/compressed/piggy.gzip.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
Building modules, stage 2.
MODPOST 3 modules
能夠看到咱們的代碼被編譯而且連接了。以後更換zImage到SD卡,刷機,只須要刷zImage就能夠了。
[ 3.225000] usbhid: USB HID core driver
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] hello kernel
[ 3.225000] Samsung Audio Subsystem Driver, (c) 2011 Samsung Electronics
[ 3.225000] audss_init: RCLK SRC[busclk]
[ 3.225000] Samsung SRP driver, (c)2011 Samsung Electronics
[ 3.310000] mmcblk0boot1: mmc0:0001 M4G1YC partition 2 2.00 MiB
能夠看到咱們的代碼在內核啓動過程當中就已經運行了。
/**************************************************************************************/linux