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

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

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

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

 

2. myadd.c 文件的内容

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

4.  vi makefile

5.  $  cd ..

     $  vi Kconfig

  

6. $  vi makefile

7.   $ cd  ..

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

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

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

 

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

 

 之后选择<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 文件输入如下内容:

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

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

ARM学习 之 如何在向内核写入系统调用的更多相关文章

  1. arm学习笔记

    学习ARM也有一定时间了,想想还是记点东西,要不以后就忘了.这是我的第一片,简简单单.但比较基础.1. ARM中一些常见英文缩写解释MSB:最高有效位:LSB:最低有效位:AHB:先进的高性能总线:V ...

  2. Linux操作系统学习_用户态与内核态之切换过程

    因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录.页表等,这些操作显然不能随便让任何程序都可以做,于是就产 ...

  3. 深入理解Linux内核-系统调用

    系统调用:用户态进程向内核发出的,实现用户态进程调用硬件设备的函数或者中断:优点:使编程更容易,将用户从学习硬件设备的低级编程特性中解放:提高系统到安全性,内核在满足请求之前可以做正确性检查:提高可移 ...

  4. linux内核增加系统调用--Beginner‘s guide

    Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常相似明知是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态. ...

  5. linux内核增加系统调用--Beginner's guide

    Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常相似明知是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态. ...

  6. ARM学习篇 中断定时理解

    1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●​若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...

  7. 2015-10-11 Sunday 晴 ARM学习

    基础的知识看得差不多了,linux系统相关的,最主要是c语言基础知道,还有linux系统编程,网络编程socket等相关的.这些内容最最基础的看完了,接下来我在考虑看什么呢?是看ARM以及驱动编程系列 ...

  8. ARM学习日记

    2012-05-15 1.ARM开发板环境的搭建,nor启动,通过suppervivi,下载vivi---下载Kernel----下载文件系统,然后Nandflash启动即可. 2.在/etc/ini ...

  9. 《转》我的ARM学习经历

    1.基础阶段     话说06年第一份工作从事的是PLC开发,用protel画原理图和PCB,写AVR单片机程序,焊焊板子,还去过华强北买器件,比较杂,但是接触面比较广,为进一步学ARM打下了基础. ...

随机推荐

  1. RecyclerView-------MainActivity代码

    package com.example.administrator.recyclerview; import android.support.v7.app.AppCompatActivity; imp ...

  2. SqlServer--模糊查询-通配符

    查询所有姓张的同学Select * from student where left(sName,1)='张'   看上去很美,如果改成查询名字中带亮的学生怎么做?换一种做法 like  Select  ...

  3. git cherry-pick合并某个commit

    1.使用方法及其作用 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit).例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开 ...

  4. Neutron 理解 (9): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的 [How Nova Implements Security Group and How Neutron Implements Virtual Firewall]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  5. FTP协议

    1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...

  6. 理解ThreadLocal(之一)

    ThreadLocal是什么 在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编 ...

  7. 洛谷P1119 灾后重建[Floyd]

    题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...

  8. 嵌入式Linux驱动学习之路(十二)按键驱动-poll机制

    实现的功能是在读取按键信息的时候,如果没有产生按键,则程序休眠在read函数中,利用poll机制,可以在没有退出的情况下让程序自动退出. 下面的程序就是在读取按键信息的时候,如果5000ms内没有按键 ...

  9. 数据库_MYSQL

     数据库简介 数据库分类:关系型数据库.非关系型数据库 常用的关系型数据库有:orcale .mysql .sql server等等 常用的非关系型数据库有: Memcached.redis.mong ...

  10. HTML中&nbsp; &ensp; &emsp; &thinsp;等6种空白空格的区别

    HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器.其他几种空格 (       ‌‍)在不同浏览器中宽度各异.   ...