免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
linux下 nm 命令

PC操作系統(tǒng):ubuntu 11.10

使用的開(kāi)發(fā)板:am335x_evm

開(kāi)發(fā)板使用的操作系統(tǒng):linux 3.2


用途


顯示關(guān)于對(duì)象文件、可執(zhí)行文件以及對(duì)象文件庫(kù)里的符號(hào)信息。

語(yǔ)法

nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B | -P ] [ -e | -g | -u ] [ -d | -o | -x | -t Format ] File ...

描述

nm 命令顯示關(guān)于指定 File 中符號(hào)的信息,文件可以是對(duì)象文件、可執(zhí)行文件或?qū)ο笪募?kù)。如果文件沒(méi)有包含符號(hào)信息,nm 命令報(bào)告該情況,但不把它解釋為出錯(cuò)條件。 nm 命令缺省情況下報(bào)告十進(jìn)制符號(hào)表示法下的數(shù)字值。

nm 命令把以下符號(hào)信息寫(xiě)入標(biāo)準(zhǔn)輸出:

庫(kù)或?qū)ο竺?br>如果您指定了 -A 選項(xiàng),則 nm 命令只報(bào)告與該文件有關(guān)的或者庫(kù)或者對(duì)象名。

符號(hào)名稱
符號(hào)類型
nm 命令使用以下符號(hào)(用同樣的字符表示弱符號(hào)作為全局符號(hào))之一來(lái)表示文件符號(hào)類型:

A    Global absolute 符號(hào)。
a    Local absolute 符號(hào)。
B    Global bss 符號(hào)。
b    Local bss 符號(hào)。
D    Global data 符號(hào)。
d    Local data 符號(hào)。
f    源文件名稱符號(hào)。
T    Global text 符號(hào)。
t    Local text 符號(hào)。
U    未定義符號(hào)。

大小
如果可應(yīng)用,nm 命令報(bào)告與符號(hào)有關(guān)的大小。

標(biāo)志

-A    每行或者顯示全路徑名稱或者顯示對(duì)象庫(kù)名。
-B    在 Berkeley 軟件分發(fā)(BSD)格式中顯示輸出:
值   類型   名稱
-C    限制解碼(demangle) C++ 名稱。缺省是解碼所有 C++ 符號(hào)名。
注:
C++ 對(duì)象文件中的符號(hào)在被使用前它們的名稱已經(jīng)被解碼了。
-d    用十進(jìn)制顯示符號(hào)的值和大小。這是缺省的。
-e    只顯示靜態(tài)的和外部的(全局)符號(hào)。
-f    顯示完整的輸出,包括冗余的 .text、 .data 以及 .bss 符號(hào),這些在通常都是被限制的。
-g    只顯示外部的(全局)符號(hào)。
-h    限制輸出頭數(shù)據(jù)的顯示。
-l    通過(guò)給 WEAK 符號(hào)的編碼鍵附加一個(gè) * 來(lái)區(qū)分 WEAK 和 GLOBAL 符號(hào)。如果和 -P 選項(xiàng)一起使用, WEAK 符號(hào)的符號(hào)類型顯示如下:
V
Weak Data 符號(hào)
W
Weak Text 符號(hào)
w
Weak 未定義符號(hào)
Z
Weak bss 符號(hào)
-o    用八進(jìn)制而不是十進(jìn)制數(shù)來(lái)顯示符號(hào)的值和大小。
-P    以標(biāo)準(zhǔn)可移植輸出格式顯示信息:
庫(kù)/對(duì)象名  名稱   類型   值   大小
該格式以十六進(jìn)制符號(hào)表示法顯示數(shù)字值,除非您用 -t、-d 或 -o 標(biāo)志指定不同的格式。

如果您指定了 -A 標(biāo)志 -P 標(biāo)志只顯示 庫(kù)/對(duì)象名字段。同樣,-P 標(biāo)志只顯示大小適用的符號(hào)大小字段。

-p    不排序。輸出按符號(hào)表順序打印。
-r    倒序排序。
-T    把可能會(huì)溢出它的列的每個(gè)名字截短,使顯示的名字的最后一個(gè)字符是星號(hào)(*)。缺省情況下,nm 顯示列出的符號(hào)的全名,并且一個(gè)比為其設(shè)置的列的寬度長(zhǎng)的名稱會(huì)引起名稱后的每個(gè)列無(wú)法對(duì)齊。
-t Format    顯示指定格式下的數(shù)字值,其中 Format 參數(shù)是以下符號(hào)表示法之一:
d
十進(jìn)制符號(hào)表示法。這是 nm 命令的缺省格式。
o
八進(jìn)制符號(hào)表示法。
x
十六進(jìn)制符號(hào)表示法。
-u    只顯示未定義符號(hào)。
-v    按值而不是按字母表順序排序輸出。
-x    用十六進(jìn)制而不是十進(jìn)制數(shù)來(lái)顯示符號(hào)的值和大小。
-X mode    指定 nm 應(yīng)該檢查的對(duì)象文件的類型。 mode 必須是下列之一:
32
只處理 32 位對(duì)象文件
64
只處理 64 位對(duì)象文件
32_64
處理 32 位和 64 位對(duì)象文件
缺省是處理 32 位對(duì)象文件(忽略 64 位對(duì)象)。 mode 也可以 OBJECT_MODE 環(huán)境變量來(lái)設(shè)置。例如,OBJECT_MODE=64 使 nm 處理任何 64 位對(duì)象并且忽略 32 位對(duì)象。 -X 標(biāo)志覆蓋 OBJECT_MODE 變量。

注:
nm 命令支持 -- (雙連字符)標(biāo)志。如果文件名會(huì)被曲解為一個(gè)選項(xiàng),該標(biāo)志區(qū)別于 File 操作數(shù)。例如,要指定文件名以連字符開(kāi)始,請(qǐng)使用 -- 標(biāo)志。
退出狀態(tài)

該命令返回下列出口值:

0    成功完成。
>0    發(fā)生錯(cuò)誤。
示例

列出 a.out 對(duì)象文件的靜態(tài)和外部符號(hào),請(qǐng)輸入:
nm -e a.out
以十六進(jìn)制顯示符號(hào)大小和值并且按值排序符號(hào),請(qǐng)輸入:
nm -xv a.out
顯示 libc.a 中所有 64 位對(duì)象符號(hào),忽略所有 32 位對(duì)象:
nm -X64 /usr/lib/libc.a
文件

/usr/ccs/bin/nm    包含 nm 命令。




示例:

程序源碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#include <linux init.h="">
#include <linux module.h="">
#include <linux leds.h="">
#include <linux io.h="">
#include <linux semaphore.h="">
#include <linux kernel.h="">
#include <linux cdev.h="">
#include <linux types.h="">
#include <linux fs.h="">    //register_chrdev_region
#include <mach gpio.h="">
#include <plat mux.h="">
#include <linux gpio.h="">
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("SM");
MODULE_VERSION("0.0.1");
//MODULE_DEVICE("global memory");
MODULE_DESCRIPTION("led ...");
MODULE_ALIAS("LED");
/*******************************************/
#define NAME "led"
#define GPIO_TO_PIN(bank, gpio)        (32 * (bank) + (gpio))
#define LED_GPIO_1                      1
#define LED_PIN_1                       24
static  int     major =283;//定義主設(shè)備號(hào)
static  struct class    *led_class;
/*******************************************/
void led_on(void)
{   
     gpio_set_value(GPIO_TO_PIN(LED_GPIO_1,LED_PIN_1), 1);
}
EXPORT_SYMBOL(led_on);
void led_off(void)
{   
     gpio_set_value(GPIO_TO_PIN(LED_GPIO_1,LED_PIN_1), 0);
}
EXPORT_SYMBOL(led_off);
void led_init(void)
{
        int result;
         /* Allocating GPIOs and setting direction */
        gpio_free(GPIO_TO_PIN(LED_GPIO_1,LED_PIN_1));
        result = gpio_request(GPIO_TO_PIN(LED_GPIO_1,LED_PIN_1), "Leds");//usr1
        if (result != 0)
                printk("gpio_request(%d_%d) failed!\n",LED_GPIO_1,LED_PIN_1);
        result = gpio_direction_output(GPIO_TO_PIN(LED_GPIO_1,LED_PIN_1), 1);
        if (result != 0)
                printk("gpio_direction(%d_%d) failed!\n",LED_GPIO_1,LED_PIN_1);
}
struct light_dev
{
    struct cdev cdev;
    unsigned char value;
};
struct light_dev *light_devp;
// 打開(kāi)和關(guān)閉函數(shù)
int light_open(struct inode *inode,struct file *filp)
{
    struct light_dev *dev;
    // 獲得設(shè)備結(jié)構(gòu)體指針
    dev = container_of(inode->i_cdev,struct light_dev,cdev);
    // 讓設(shè)備結(jié)構(gòu)體作為設(shè)備的私有信息
    filp->private_data = dev;
    return 0;
}
int light_release(struct inode *inode,struct file *filp)
{
    return 0;   
}
// ioctl
long light_ioctl(struct file *filp,unsigned int cmd,
unsigned long arg)
{
    struct light_dev *dev = filp->private_data;
    switch(cmd)
    {
        case 0:
            dev->value = 0;
            led_off();        
            break;
        case 1:
            dev->value = 1;
            led_on();
           break;
        default:
            return -ENOTTY;
        // break;
    }
    return 0;
//set up the cdev structure for a device
static  void    led_setup_cdev(struct cdev* dev,int minor,struct file_operations *fops)
{
    int     err, devno  = MKDEV(major,minor);
    cdev_init(dev,fops);
    dev->owner   = THIS_MODULE;
    dev->ops = fops;
    err         = cdev_add(dev,devno,1);
    if(err)
        printk(KERN_NOTICE"Error %d adding led%d",err,minor);
}  
struct file_operations light_fops =
{
    .owner = THIS_MODULE,
    .unlocked_ioctl = light_ioctl,
    .open  = light_open,
    .release = light_release,
};
static  struct cdev cdev_led;
// 模塊加載函數(shù)
int light_init(void)
{
    int ret;
    dev_t   dev = MKDEV(major,0);
    led_init();
    printk(KERN_ALERT "led modules is install\n");  
 //   ret=register_chrdev(major,NAME,&light_fops);  
    if(major)
        ret = register_chrdev_region(dev,1,NAME);
    else
    {
        ret = alloc_chrdev_region(&dev,0,1,NAME);
        major   = MAJOR(dev);
    }
    if(ret<0)  
    {  
      printk("unable to register myled driver!\n");  
      return ret;  
     }    
    printk(KERN_DEBUG"led device number : %x\n",dev);
    led_setup_cdev(&cdev_led,0,&light_fops);      
    led_class   = class_create(THIS_MODULE,"led_class");
    if(IS_ERR(led_class))
    {
        printk(KERN_INFO"create led class error\n");
        return -1;
    }
    device_create(led_class,NULL,dev,NULL,"led" "%d",MINOR(dev));
    return 0; 
}
// 模塊卸載函數(shù)
void light_cleanup(void)
{
 //   unregister_chrdev(major,NAME);  
    device_destroy(led_class,MKDEV(major,0));
    class_destroy(led_class);
    cdev_del(&cdev_led);
    unregister_chrdev_region(MKDEV(major,0),1);
    printk("Goodbye,cruel world!\n");
}
module_init(light_init);
module_exit(light_cleanup);
</linux></plat></mach></linux></linux></linux></linux></linux></linux></linux></linux></linux>


結(jié)果顯示:



本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
led燈驅(qū)動(dòng)測(cè)試
linux設(shè)備驅(qū)動(dòng)之led子系統(tǒng)<一>
Linux下AM335X的GPIO控制
通過(guò)一個(gè)LED驅(qū)動(dòng)程序開(kāi)始學(xué)寫(xiě)Linux字符設(shè)備驅(qū)動(dòng)
Linux驅(qū)動(dòng)程序開(kāi)發(fā) - 設(shè)備驅(qū)動(dòng)模型初探
手把手帶你寫(xiě)一個(gè)中斷輸入設(shè)備驅(qū)動(dòng)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服