ARM学习 之 如何在向内核写入系统调用

时间:2021-12-04 15:12:38

本文主要介绍两个例子:1-系统调用打印“hello kernel”  2-驱动开发板的蜂鸣器

使用的是友善之臂(Friendly ARM)的开发板,三星2440

========================================================================================

1. 进入linux-2.6.32.2 目录,新建mysyscall 文件夹,并进入。然后新建.c 文件

 ARM学习 之 如何在向内核写入系统调用

2. myadd.c 文件的内容

ARM学习 之 如何在向内核写入系统调用

3. 新建, vi Kconfig  内容如下:

ARM学习 之 如何在向内核写入系统调用

4.  vi makefile

ARM学习 之 如何在向内核写入系统调用

5.  $  cd ..

     $  vi Kconfig

  ARM学习 之 如何在向内核写入系统调用

6. $  vi makefile

ARM学习 之 如何在向内核写入系统调用

7.   $ cd  ..

     $ vi arch/arm/include/asm/unistd.h

ARM学习 之 如何在向内核写入系统调用

8.  $ vi arch/arm/kernel/calls.S

ARM学习 之 如何在向内核写入系统调用

9.  $ make menuconfig  (必须在~/sq1600/linux-2.6.32.2  目录下)

 ARM学习 之 如何在向内核写入系统调用

10. 回车进入my sys call ---> ,空格选择 *

 ARM学习 之 如何在向内核写入系统调用

 之后选择<Exit>退出并保存

 

11.  $ cat   .config|grep CONFIG_MY_SYSCALL  - (会有CONFIG_MY_SYSCALL=出现,则正确)

       $ make zImage   -  编译

=====================================================

xcx@xcx-vm:~/sq1600/linux-2.6.32.2$ ls drivers/mysyscall/

built-in.o Kconfig  Makefile  myadd.c  myadd.o

=====================================================

 

12.   $ cp  arch/arm/boot/zImage   /tftpboot    - 复制到tftp的目录下

 

13. 进入开发板的【u-boot】,依次执行如下命令:

ping 192.168.0.1  - 网络是否通畅

tftp 0x30008000 zImage   -- 拷贝到开发板

nand erase 0x60000 0x500000  --  擦除缓存区内容

nand write 0x30008000 0x60000 0x500000  --  写入内容

14. 进入目录~/sq1600/07/1_syscall的目录下

新建test_syscall.c 文件输入如下内容:

ARM学习 之 如何在向内核写入系统调用

ARM学习 之 如何在向内核写入系统调用

// 以下是控制蜂鸣器的   新建test_buzzer.c 文件输入如下内容:

ARM学习 之 如何在向内核写入系统调用

ARM学习 之 如何在向内核写入系统调用

15.  xcx@xcx-vm:~/sq1600/07/1_syscall$ arm-linux-gcc test_syscall.c -o test_syscall

       xcx@xcx-vm:~/sq1600/07/1_syscall$ cp test_syscall  /tftpboot/

 

16.   重启开发板,

进入开发板的/home/plg目录下

[root@FriendlyARM plg]#

[root@FriendlyARM plg]#  ifconfig eth0 192.168.0.230   - 设置开发板ip地址

[root@FriendlyARM plg]#  ping 192.168.0.1     - 查看网络是否通

[root@FriendlyARM plg]#  ping 192.168.0.1  

=================================================

PING 192.168.0.1 (192.168.0.1): 56 data bytes

64 bytes from 192.168.0.1: seq=0 ttl=64 time=2.797 ms

64 bytes from 192.168.0.1: seq=1 ttl=64 time=0.775 ms

^C

--- 192.168.0.1 ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.775/1.786/2.797 ms

==================================================

结果如上,表示网络通畅

17.  [root@FriendlyARM plg]#  tftp  -r  test_syscall  -g 192.168.0.1                      

       [root@FriendlyARM plg]#  ./test_syscall