新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 應(yīng)用調(diào)試-----自制系統(tǒng)調(diào)用、編寫進(jìn)程查看器

        應(yīng)用調(diào)試-----自制系統(tǒng)調(diào)用、編寫進(jìn)程查看器

        作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
        把29th_app_system_callkernel里的文件復(fù)制到內(nèi)核目錄
        syscalls.h ==> include/linux
        read_write.c ==> fs/
        calls.S ==> arch/arm/kernel
        解析:當(dāng)應(yīng)用程序調(diào)用open、read、write函數(shù)時會執(zhí)行swi val指令,從而引發(fā)一個異常,就像中斷一樣,就會進(jìn)入內(nèi)核的異常處理函數(shù)里面,根據(jù)不同的val值來調(diào)用sys_open、sys_read、sys_write(虛擬文件系統(tǒng)VFS),并根據(jù)操作不同的文件屬性(C:字符型設(shè)備,主設(shè)備號)在chrdev數(shù)組中找到file_operations類型的結(jié)構(gòu)體指針,通過file_operations結(jié)構(gòu)體指針找到對應(yīng)的open、read、write(first_drv_open,first_drv_write)驅(qū)動函數(shù)。可以利用驅(qū)動程序查看應(yīng)用程序當(dāng)中全局變量、局部變量的信息,并打印出來。
        故首先在calls.S 中:
        // 350
        CALL(sys_timerfd)
        CALL(sys_eventfd)
        CALL(sys_hello) //增加sys_hello的注冊
        再在read_write.c 中實現(xiàn)sys_hello函數(shù)體:
        asmlinkage void sys_hello(const char __user * buf, int count)
        {
        char ker_buf[100];
        if (buf)
        {
        copy_from_user(ker_buf, buf, (count < 100) ? count : 100);
        ker_buf[99] = 主站蜘蛛池模板: 梧州市| 普洱| 广河县| 新兴县| 龙里县| 江安县| 厦门市| 青海省| 承德县| 武穴市| 仁寿县| 海城市| 大洼县| 苍山县| 安福县| 寿宁县| 虹口区| 桓台县| 来安县| 建宁县| 静乐县| 靖州| 湘乡市| 绍兴县| 友谊县| 金山区| 淳化县| 广昌县| 枣庄市| 迭部县| 巢湖市| 马山县| 邮箱| 舒城县| 玉溪市| 华亭县| 阳新县| 德阳市| 海南省| 江孜县| 兴安盟|