久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

linux下 nm 命令

 Tornador 2016-07-15

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

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

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


用途


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

語法

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 中符號的信息,,文件可以是對象文件,、可執(zhí)行文件或?qū)ο笪募?。如果文件沒有包含符號信息,,nm 命令報告該情況,,但不把它解釋為出錯條件,。 nm 命令缺省情況下報告十進制符號表示法下的數(shù)字值,。

nm 命令把以下符號信息寫入標準輸出:

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

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

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

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

標志

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

如果您指定了 -A 標志 -P 標志只顯示 庫/對象名字段,。同樣,-P 標志只顯示大小適用的符號大小字段,。

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

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

該命令返回下列出口值:

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

列出 a.out 對象文件的靜態(tài)和外部符號,,請輸入:
nm -e a.out
以十六進制顯示符號大小和值并且按值排序符號,請輸入:
nm -xv a.out
顯示 libc.a 中所有 64 位對象符號,,忽略所有 32 位對象:
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è)備號
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;
// 打開和關(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é)果顯示:



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多