PIXNET Logo登入

尋找最初的初衷

跳到主文

迷失在LINUX的小書僮

部落格全站分類:職場甘苦

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 2月 06 週五 201513:38
  • 電影:熊麻吉2 (Ted 2)

ted_two
劇情簡介:2012年賣作喜劇【熊麻吉】續集, 目前僅知"馬克華柏格"會回歸演出,導演"賽斯麥克法蘭"也將再度為熊麻吉獻聲演出....



(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(75)

  • 個人分類:電影心得
▲top
  • 12月 16 週二 201416:30
  • 電影:鬼敲門(The Babadook)

劇情簡介:即使丈夫過世已經六年,艾蜜莉亞仍無法走出喪夫之痛,更煎熬的是,她發現自己竟憎恨起相依為命的六歲獨子山繆。沒錯,她的丈夫正是在帶艾蜜莉亞趕赴醫院生產時捲入車禍而死。山繆與一般的孩子不一樣,他時常告訴媽媽,夢裡有隻怪物會把她們母子都殺死;當艾蜜莉亞意外得到一本名為《巴巴杜》的童書後,山繆的行為舉止竟越來越暴力,在靈異現象與入邪至親的雙重壓力下艾蜜莉亞瀕臨崩潰,當她再次翻開《巴巴杜》,發現那頭夢中怪物居然活生生顯現在眼前……


babadook
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(151)

  • 個人分類:電影心得
▲top
  • 11月 14 週五 201417:25
  • Linux shell script 的彩色控制

Linux 下的終端機畫面不是只能換換背景而已,顯示出來的顏色也是能控制的。使用的顏色就像以前的DOS 時代,或者現在的BBS 顏色控制方式一樣。
以shell 的顯示為例,顯示的格式如下:
\033[ 亮度 ; 文字顏色 ; 背景顏色 m
文字內容………………
\033[0m
亮度是0 或1
文字及背景顏色有色碼有查 (以後附上),而背景顏色是可省略的。
如果我要在畫面上顯示高亮度的綠色(32)及黑色背景,可以如下:
\033[1;32;40m 我的文字 \033[0m
記得shell 輸出碼要用 printf 而不是用一般的 echo。
但並不是所有的終端機畫面都是用黑色背景的。如果我們不要它的黑色背景,可以省略背景如下:
\033[1;32m 我的文字 \033[0m
這樣就比較完美。
其實這些控制碼和BBS 的還真像。
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(293)

  • 個人分類:linux
▲top
  • 11月 12 週三 201410:46
  • 電影:玩命關頭七(Fast & Furious 7)

furious-7-poster01
劇情簡介:玩命關頭老班底"馮迪索"與"保羅沃克"再度聯手出擊,這一集將從東京飆到中東,傑森史塔森也將加入本集演出陣容。【奪魂鋸】導演溫子仁接任導演,馮迪索續任製片。




(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(80)

  • 個人分類:電影心得
▲top
  • 9月 29 週一 201416:31
  • What is tty ?

[以上文章來自http://flykof.pixnet.net/blog/post/]
What is tty? 
        終端是一種字元裝置(Char Device),它有多種類型,通常使用tty(Teletype)來簡稱各種類型的終端設備。Teletype是最早出現的一種終端設備,很象電傳打字機(或者說就是),是由Teletype公司生產的。設備名放在特殊檔案目錄/dev/下,終端特殊設備檔案一般有以下幾種︰
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(114)

  • 個人分類:linux
▲top
  • 6月 22 週日 201414:35
  • 電影:移動迷宮(The Maze Runner)

劇情簡介:改編自全球青少年驚悚奇幻小說『移動迷宮』,末日後的世界裡,喪失記憶的湯瑪士(狄倫歐布萊恩 飾演)與一群少年困在一座精心設計的殺人迷宮當中。只有加入這群少年,成為《跑者》,才能在這生存下來。唯有生存,才能解開謎團,揭開驚人的祕密,找幕後黑手!


maze_runner
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(108)

  • 個人分類:電影心得
▲top
  • 6月 22 週日 201414:24
  • 電影:猩球崛起2: 黎明的進擊(Dawn of the Planet of the Apes)

dawn_of_the_planet_of_the_apes_ver5
劇情簡介:【猩球崛起】正宗續集。在歷經了一場瘟疫浩劫幾乎消滅了大半人類之後,一群人類科學家聚集在舊金山作困獸之鬥.... 在此同時,人猿領袖凱撒(安迪薩奇斯 飾演)則企圖維持他在智能猿猴間的權力地位。當兩方人馬不斷地各自壯大,地球上兩個足以主宰世界的生物—人類與人猿間對立態勢漸趨緊繃,戰爭隨時一觸即發,最終究竟是誰能夠握有地球統治權?

(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(50)

  • 個人分類:電影心得
▲top
  • 6月 22 週日 201414:10
  • 電影:舞力全開5(Step Up All In)

劇情簡介:在這舞力全開最新一集裡,過去四集全明星即將回歸,閃耀賭城拉斯維加斯,爭取最後勝利,重新定義自己的夢想與志業。


step_up_all_in
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(135)

  • 個人分類:電影心得
▲top
  • 6月 15 週日 201414:13
  • Linux中的同步机制 -- Futex

转载感言:发现一篇还不错的文章,跟大家分享一下。该文简单介绍了Futex机制,并有一些简单的例子,浅显易懂。
Linux中的同步机制(一)--Futex引子
在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?
1. 什么是Futex
Futex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Russell共同设计完成。几位都是linux领域的专家,其中可能Ingo Molnar大家更熟悉一些,毕竟是O(1)调度器和CFS的实现者。
Futex按英文翻译过来就是快速用户空间互斥体。其设计思想其实 不难理解,在传统的Unix系统中,System V IPC(inter process communication),如 semaphores, msgqueues, sockets还有文件锁机制(flock())等进程间同步机制都是对一个内核对象操作来完成的,这个内核对象对要同步的进程都是可见的,其提供了共享 的状态信息和原子操作。当进程间要同步的时候必须要通过系统调用(如semop())在内核中完成。可是经研究发现,很多同步是无竞争的,即某个进程进入 互斥区,到再从某个互斥区出来这段时间,常常是没有进程也要进这个互斥区或者请求同一同步变量的。但是在这种情况下,这个进程也要陷入内核去看看有没有人 和它竞争,退出的时侯还要陷入内核去看看有没有进程等待在同一同步变量上。这些不必要的系统调用(或者说内核陷入)造成了大量的性能开销。为了解决这个问 题,Futex就应运而生,Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享 的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不 用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或者 wake up)。简单的说,futex就是通过在用户态的检查,(motivation)如果了解到没有竞争就不用陷入内核了,大大提高了low-contention时候的效率。 Linux从2.5.7开始支持Futex。
2. Futex系统调用
Futex是一种用户态和内核态混合机制,所以需要两个部分合作完成,linux上提供了sys_futex系统调用,对进程竞争情况下的同步处理提供支持。
其原型和系统调用号为
       #include <linux/futex.h>
       #include <sys/time.h>
     int futex (int *uaddr, int op, int val, const struct timespec *timeout,int *uaddr2, int val3);
       #define __NR_futex                 240
             
       虽然参数有点长,其实常用的就是前面三个,后面的timeout大家都能理解,其他的也常被ignore。
       uaddr就是用户态下共享内存的地址,里面存放的是一个对齐的整型计数器。
       op存放着操作类型。定义的有5中,这里我简单的介绍一下两种,剩下的感兴趣的自己去man futex
       FUTEX_WAIT: 原子性的检查uaddr中计数器的值是否为val,如果是则让进程休眠,直到FUTEX_WAKE或者超时(time-out)。也就是把进程挂到uaddr相对应的等待队列上去。
       FUTEX_WAKE: 最多唤醒val个等待在uaddr上进程。
      
       可见FUTEX_WAIT和FUTEX_WAKE只是用来挂起或者唤醒进程,当然这部分工作也只能在内核态下完成。有些人尝试着直接使用futex系统调 用来实现进程同步,并寄希望获得futex的性能优势,这是有问题的。应该区分futex同步机制和futex系统调用。futex同步机制还包括用户态 下的操作,我们将在下节提到。
             
3. Futex同步机制
所有的futex同步操作都应该从用户空间开始,首先创建一个futex同步变量,也就是位于共享内存的一个整型计数器。
当 进程尝试持有锁或者要进入互斥区的时候,对futex执行"down"操作,即原子性的给futex同步变量减1。如果同步变量变为0,则没有竞争发生, 进程照常执行。如果同步变量是个负数,则意味着有竞争发生,需要调用futex系统调用的futex_wait操作休眠当前进程。
当进程释放锁或 者要离开互斥区的时候,对futex进行"up"操作,即原子性的给futex同步变量加1。如果同步变量由0变成1,则没有竞争发生,进程照常执行。如 果加之前同步变量是负数,则意味着有竞争发生,需要调用futex系统调用的futex_wake操作唤醒一个或者多个等待进程。
这里的原子性加减通常是用CAS(Compare and Swap)完成的,与平台相关。CAS的基本形式是:CAS(addr,old,new),当addr中存放的值等于old时,用new对其替换。在x86平台上有专门的一条指令来完成它: cmpxchg。
可见: futex是从用户态开始,由用户态和核心态协调完成的。
4. 进/线程利用futex同步
进程或者线程都可以利用futex来进行同步。
对于线程,情况比较简单,因为线程共享虚拟内存空间,虚拟地址就可以唯一的标识出futex变量,即线程用同样的虚拟地址来访问futex变量。
对 于进程,情况相对复杂,因为进程有独立的虚拟内存空间,只有通过mmap()让它们共享一段地址空间来使用futex变量。每个进程用来访问futex的 虚拟地址可以是不一样的,只要系统知道所有的这些虚拟地址都映射到同一个物理内存地址,并用物理内存地址来唯一标识futex变量。
      
小结:
1. Futex变量的特征:1)位于共享的用户空间中 2)是一个32位的整型 3)对它的操作是原子的
2. Futex在程序low-contention的时候能获得比传统同步机制更好的性能。
3. 不要直接使用Futex系统调用。
4. Futex同步机制可以用于进程间同步,也可以用于线程间同步。
Linux中的线程同步机制(二)--In Glibc在linux中进行多线程开发,同步是不可回避的一个问题。在POSIX标准中定义了三种线程同步机制: Mutexes(互斥量), Condition Variables(条件变量)和POSIX Semaphores(信号量)。NPTL基本上实现了POSIX,而glibc又使用NPTL作为自己的线程库。因此glibc中包含了这三种同步机制 的实现(当然还包括其他的同步机制,如APUE里提到的读写锁)。
Glibc中常用的线程同步方式举例:
Semaphore
变量定义:      sem_t sem;
初始化:        sem_init(&sem,0,1);
进入加锁:       sem_wait(&sem);
退出解锁:       sem_post(&sem);
Mutex
变量定义:      pthread_mutex_t mut;
初始化:        pthread_mutex_init(&mut,NULL);
进入加锁:       pthread_mutex_lock(&mut);
退出解锁:       pthread_mutex_unlock(&mut);
这些用于同步的函数和futex有什么关系?下面让我们来看一看:
以Semaphores为例,
进入互斥区的时候,会执行sem_wait(sem_t *sem),sem_wait的实现如下:
int sem_wait (sem_t *sem)
{
int *futex = (int *) sem;
if (atomic_decrement_if_positive (futex) > 0)
      return 0;
int     err = lll_futex_wait (futex, 0);
      return -1;
)
atomic_decrement_if_positive()的语义就是如果传入参数是正数就将其原子性的减一并立即返回。如果信号量为正,在Semaphores的语义中意味着没有竞争发生,如果没有竞争,就给信号量减一后直接返回了。
如果传入参数不是正数,即意味着有竞争,调用lll_futex_wait(futex,0),lll_futex_wait是个宏,展开后为:
#define lll_futex_wait(futex, val) \
({                                                              \
      ...
      __asm __volatile (LLL_EBX_LOAD                                      \
                    LLL_ENTER_KERNEL                                      \
                    LLL_EBX_LOAD                                      \
                    : "=a" (__status)                                      \
                    : "0" (SYS_futex), LLL_EBX_REG (futex), "S" (0),              \
                  "c" (FUTEX_WAIT), "d" (_val),                          \
                  "i" (offsetof (tcbhead_t, sysinfo))                    \
                    : "memory");                                      \
      ...                                                        \
})
可以看到当发生竞争的时候,sem_wait会调用SYS_futex系统调用,并在val=0的时候执行FUTEX_WAIT,让当前线程休眠。
从 这个例子我们可以看出,在Semaphores的实现过程中使用了futex,不仅仅是说其使用了futex系统调用(再重申一遍只使用futex系统调 用是不够的),而是整个建立在futex机制上,包括用户态下的操作和核心态下的操作。其实对于其他glibc的同步机制来说也是一样,都采纳了 futex作为其基础。所以才会在futex的manual中说:对于大多数程序员不需要直接使用futexes,取而代之的是依靠建立在futex之上 的系统库,如NPTL线程库(most programmers will in fact not be using futexes directly but instead rely on system libraries built on them, such as the NPTL pthreads implementation)。所以才会有如果在编译内核的时候不 Enable futex support,就"不一定能正确的运行使用Glibc的程序"。
小结:
1. Glibc中的所提供的线程同步方式,如大家所熟知的Mutex,Semaphore等,大多都构造于futex之上了,除了特殊情况,大家没必要再去实现自己的futex同步原语。
2. 大家要做的事情,似乎就是按futex的manual中所说得那样: 正确的使用Glibc所提供的同步方式,并在使用它们的过程中,意识到它们是利用futex机制和linux配合完成同步操作就可以了。
Linux中的线程同步机制(三)--Practice
上回说到Glibc中(NPTL)的线程同步方式如Mutex,Semaphore等都使用了futex作为其基础。那么实际使用是什么样子,又会碰到什么问题呢?
先来看一个使用semaphore同步的例子。
sem_t sem_a;
void *task1();
int main(void){
int ret=0;
pthread_t thrd1;
sem_init(&sem_a,0,1);
ret=pthread_create(&thrd1,NULL,task1,NULL); //创建子线程
pthread_join(thrd1,NULL); //等待子线程结束
}
void *task1()
{
  int sval = 0;
  sem_wait(&sem_a); //持有信号量
sleep(5); //do_nothing
  sem_getvalue(&sem_a,&sval);
  printf("sem value = %d\n",sval);
  sem_post(&sem_a); //释放信号量
}
程序很简单,我们在主线程(执行main的线程)中创建了一个线程,并用join等待其结束。在子线程中,先持有信号量,然后休息一会儿,再释放信号量,结束。
因为这段代码中只有一个线程使用信号量,也就是没有线程间竞争发生,按照futex的理论,因为没有竞争,所以所有的锁操作都将在用户态中完成,而不会执行系统调用而陷入内核。我们用strace来跟踪一下这段程序的执行过程中所发生的系统调用:
...
20533 futex(0xb7db1be8, FUTEX_WAIT, 20534, NULL <unfinished ...>
20534 futex(0x8049870, FUTEX_WAKE, 1)    = 0
20533 <... futex resumed> )              = 0
...
20533是main线程的id,20534是其子线程的id。出乎我们意料之外的是这段程序还是发生了两次futex系统调用,我们来分析一下这分别是什么原因造成的。
1. 出人意料的"sem_post()"
20534 futex(0x8049870, FUTEX_WAKE, 1)    = 0
子 线程还是执行了FUTEX_WAKE的系统调用,就是在sem_post(&sem_a);的时候,请求内核唤醒一个等待在sem_a上的线程, 其返回值是0,表示现在并没有线程等待在sem_a(这是当然的,因为就这么一个线程在使用sem_a),这次futex系统调用白做了。这似乎和 futex的理论有些出入,我们再来看一下sem_post的实现。
int sem_post (sem_t *sem)
{
  int *futex = (int *) sem;
  int nr = atomic_increment_val (futex);
  int err = lll_futex_wake (futex, nr);
  return 0;
}
我们看到,Glibc在实现sem_post的时候给futex原子性的加上1后,不管futex的值是什么,都执行了lll_futex_wake(),即futex(FUTEX_WAKE)系统调用。
在 第二部分中(见前文),我们分析了sem_wait的实现,当没有竞争的时候是不会有futex调用的,现在看来真的是这样,但是在sem_post的时 候,无论有无竞争,都会调用sys_futex(),为什么会这样呢?我觉得应该结合semaphore的语义来理解。在semaphore的语义 中,sem_wait()的意思是:"挂起当前进程,直到semaphore的值为非0,它会原子性的减少semaphore计数值。" 我们可以看到,semaphore中是通过0或者非0来判断阻塞或者非阻塞线程。即无论有多少线程在竞争这把锁,只要使用了 semaphore,semaphore的值都会是0。这样,当线程推出互斥区,执行sem_post(),释放semaphore的时候,将其值由0改 1,并不知道是否有线程阻塞在这个semaphore上,所以只好不管怎么样都执行futex(uaddr, FUTEX_WAKE, 1)尝试着唤醒一个进程。而相反的,当sem_wait(),如果semaphore由1变0,则意味着没有竞争发生,所以不必去执行futex系统调 用。我们假设一下,如果抛开这个语义,如果允许semaphore值为负,则也可以在sem_post()的时候,实现futex机制。
2. 半路杀出的"pthread_join()"
那另一个futex系统调用是怎么造成的呢? 是因为pthread_join();
在Glibc中,pthread_join也是用futex系统调用实现的。程序中的pthread_join(thrd1,NULL); 就对应着
20533 futex(0xb7db1be8, FUTEX_WAIT, 20534, NULL <unfinished ...>
很 好解释,主线程要等待子线程(id号20534上)结束的时候,调用futex(FUTEX_WAIT),并把var参数设置为要等待的子线程号 (20534),然后等待在一个地址为0xb7db1be8的futex变量上。当子线程结束后,系统会负责把主线程唤醒。于是主线程就
20533 <... futex resumed> )              = 0
恢复运行了。
要注意的是,如果在执行pthread_join()的时候,要join的线程已经结束了,就不会再调用futex()阻塞当前进程了。
3. 更多的竞争。
我们把上面的程序稍微改改:
在main函数中:
int main(void){
...
sem_init(&sem_a,0,1);
ret=pthread_create(&thrd1,NULL,task1,NULL);
ret=pthread_create(&thrd2,NULL,task1,NULL);
ret=pthread_create(&thrd3,NULL,task1,NULL);
ret=pthread_create(&thrd4,NULL,task1,NULL);
pthread_join(thrd1,NULL);
pthread_join(thrd2,NULL);
pthread_join(thrd3,NULL);
pthread_join(thrd4,NULL);
...
}
这样就有更的线程参与sem_a的争夺了。我们来分析一下,这样的程序会发生多少次futex系统调用。
1) sem_wait()
     第一个进入的线程不会调用futex,而其他的线程因为要阻塞而调用,因此sem_wait会造成3次futex(FUTEX_WAIT)调用。
2) sem_post()
     所有线程都会在sem_post的时候调用futex, 因此会造成4次futex(FUTEX_WAKE)调用。
3) pthread_join()
     别忘了还有pthread_join(),我们是按thread1, thread2, thread3, thread4这样来join的,但是线程的调度存在着随机性。如果thread1最后被调度,则只有thread1这一次futex调用,所以 pthread_join()造成的futex调用在1-4次之间。(虽然不是必然的,但是4次更常见一些)    
所以这段程序至多会造成3+4+4=11次futex系统调用,用strace跟踪,验证了我们的想法。
19710 futex(0xb7df1be8, FUTEX_WAIT, 19711, NULL <unfinished ...>
19712 futex(0x8049910, FUTEX_WAIT, 0, NULL <unfinished ...>
19713 futex(0x8049910, FUTEX_WAIT, 0, NULL <unfinished ...>
19714 futex(0x8049910, FUTEX_WAIT, 0, NULL <unfinished ...>
19711 futex(0x8049910, FUTEX_WAKE, 1 <unfinished ...>
19710 futex(0xb75f0be8, FUTEX_WAIT, 19712, NULL <unfinished ...>
19712 futex(0x8049910, FUTEX_WAKE, 1 <unfinished ...>
19710 futex(0xb6defbe8, FUTEX_WAIT, 19713, NULL <unfinished ...>
19713 futex(0x8049910, FUTEX_WAKE, 1 <unfinished ...>
19710 futex(0xb65eebe8, FUTEX_WAIT, 19714, NULL <unfinished ...>
19714 futex(0x8049910, FUTEX_WAKE, 1)    = 0
(19710是主线程,19711,19712,19713,19714是4个子线程)
4. 更多的问题
事 情到这里就结束了吗? 如果我们把semaphore换成Mutex试试。你会发现当自始自终没有竞争的时候,mutex会完全符合futex机制,不管是lock还是 unlock都不会调用futex系统调用。有竞争的时候,第一次pthread_mutex_lock的时候不会调用futex调用,看起来还正常。但 是最后一次pthread_mutex_unlock的时候,虽然已经没有线程在等待mutex了,可还是会调用futex(FUTEX_WAKE)。原因是什么?欢迎讨论!!!
小结:
1. 虽然semaphore,mutex等同步方式构建在futex同步机制之上。然而受其语义等的限制,并没有完全按futex最初的设计实现。
2. pthread_join()等函数也是调用futex来实现的。
3. 不同的同步方式都有其不同的语义,不同的性能特征,适合于不同的场景。我们在使用过程中要知道他们的共性,也得了解它们之间的差异。这样才能更好的理解多线程场景,写出更高质量的多线程程序。
转载地址:
http://blog.csdn.net/Javadino/archive/2008/09/06/2891385.aspx
http://blog.csdn.net/Javadino/archive/2008/09/06/2891388.aspx
http://blog.csdn.net/Javadino/archive/2008/09/06/2891399.aspx
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(2,489)

  • 個人分類:linux
▲top
  • 1月 24 週五 201401:00
  • Kconfig

Kconfig (Linux)
 
What is Kconfig file?
當user在compiler Linux kernel 2.6的時候,打make menuconfig時,會出現選單讓user選擇想安裝的項目,而這些設定檔都寫在Kconfig file中,source code tree下幾乎每一個目錄夾都會有Kconfig file。(Linux kernel 2.4 則為Config.in file)
How to write Kconfig
1. How to Add a Item in Menu List
每一個選項開始都必須以”config”開頭
Ex.
config DM9000
tristate “DM9000A support”
depends on NET_ETHERNET
select CRC32
- type definition:”bool” / ”tristate” / ”string” / ”hex” / ”int”
選擇想要輸入的型態,通常driver類都用bool或是tristate,如果是參數或 是變數,則用string, hex or int。
bool:built-in and exclude
當你用bool type ---> [ ]DM9000A support
tristate:built-in, module, exclude
當你用tristate type ---> < >DM9000A support
int, string, hex:
當你用int, string, or hex --->( ) DM9000A support.
- input prompt: "prompt" ["if" ]
選單上所看到的選項的字
Ex.
bool “Networking Support”
or
bool
prompt “Networking Support”
- default value: "default" ["if" ]
設定預設的值。
Ex.
config VECTORS_BASE
hex
default 0xffff0000 if MMU CPU_HIGH_VECTOR
default DRAM_BASE if REMAP_VECTORS_TO_RAM
default 0x00000000
- dependencies: "depends on"/"requires" 
Ex.
config DM9000A
tristate "DM9000A support"
depends on NET_ETHERNET
select CRC32
如果NET_ETHERNET選項有選,才能看見DM9000A這選項。
- reverse dependencies: "select" ["if" ]
While normal dependencies reduce the upper limit of a symbol, reverse dependencies can be used to force a lower limit of another symbol. Reverse dependencies can only be used with bool or tristate symbols.
Ex.
config DM9000A
tristate "DM9000A support"
depends on NET_ETHERNET
select CRC32
當選擇DM9000A選項時,CRC32也一起被選入。
- help text: "help" or "---help---"
help的文字。
2. How to Add a Directory in Menu List 
- menu:
主要是用menu and endmenu來建立。
menu “Device Driver”
config NETDEVICE
:
endmenu
- choice
目錄內選定的項目,會顯示在母目錄上,而且只能選一個選項。
Ex.
A--
-----a
-----b
-----c
a, b, c只能選一個,如果選擇a,則會顯示A (a) --->
=========================================
Choice
prompt "Subarchitecture Type"
default X86_PC
config X86_PC
bool "PC-compatible"
help
Choose this option if your computer is a standard PC or compatible.
config X86_ELAN
bool "AMD Elan"
help
Select this for an AMD Elan processor.
:
:
Endchoice
====================================================
如果選擇” PC-compatible”,則menulist上會顯示 Subarchitecture Type (PC-compatible) --->。
如果選擇” AMD Elan”,則menulist上會顯示 Subarchitecture Type (AMD Elan) --->。
- comment:在menu list 中顯示文字
comment "SCSI support type (disk, tape, CD-ROM)"
(繼續閱讀...)
文章標籤

ryan0988 發表在 痞客邦 留言(0) 人氣(1,925)

  • 個人分類:linux
▲top
«1234...17»

個人資訊

ryan0988
暱稱:
ryan0988
分類:
職場甘苦
好友:
累積中
地區:

熱門文章

  • (25,989)C/C++中的日期和時間 time_t與struct tm轉換
  • (6,984)bzero & memset
  • (4,848)linux中时间设置date、hwclock、clock
  • (4,403)NAND Flash和NOR Flash的比較
  • (3,179)Remove a symbol link
  • (2,582)英文筆記(2)
  • (2,231)O_EXCL到底有什麼用
  • (1,713)避免linux zombie process
  • (1,438)return與exit()的差別
  • (317)電影:超世紀戰警:闇黑對決(Riddick)

文章分類

  • 旅遊 (1)
  • 報稅 (2)
  • 寵物 (1)
  • 大陸出差 (2)
  • 電影心得 (94)
  • linux (25)
  • IP CAM (7)
  • 玉石 (1)
  • 安控 (1)
  • 軟體 (2)
  • C語言 (11)
  • 英文筆記 (14)
  • 未分類文章 (1)

最新文章

  • [轉貼]宇宙開發產業的 Linux
  • GCC Sysroot & Spec Files
  • uboot load address, entry point, bootm address以及kernel運行位址的意義和關係
  • Bootstrap介紹
  • SDHC/SDXC介紹
  • SD卡介紹
  • MMC Card介紹
  • Compact Flash介紹
  • 函式庫(wiki)
  • 程式減肥三步走

最新留言

  • [25/09/24] FIRE 於文章「電影:地球過後(After Earth)...」留言:
    由于霍金预言已被全球各航天局确认,此行星将于2030毁灭,2...
  • [23/06/30] 谷歌搜美國春藥網 於文章「十個不養拉布拉多犬的理由...」留言:
    非常不錯的por文,非常值得推薦~ 色界催情藥:htt...
  • [23/02/13] 7755780 於文章「十個不養拉布拉多犬的理由...」留言:
    小禎代言韓國奇力片:https://chilliess.co...
  • [22/09/04] 訪客 於文章「英文筆記(全世界國家英文名字)...」留言:
    謝謝分享!我找到這個英文名字生產器很不錯:https://w...
  • [22/07/31] 訪客 於文章「英文筆記(全世界國家英文名字)...」留言:
    謝謝分享!我在這個網站 https://www.namech...
  • [22/04/10] 訪客 於文章「常見水果(英文名稱)...」留言:
    回饋您這方面資訊,我是從 PTT搜尋引擎的排名,看...
  • [21/08/29] jwang0189 於文章「常見水果(英文名稱)...」留言:
    非常實用的文章,謝謝提供,已點廣告表示支持 https://...
  • [17/11/04] 66國語言翻譯公司 於文章「[轉貼]宇宙開發產業的 Linux...」留言:
    是那下然能也才特了他見國不好每你工麼來就事們時用的 1...
  • [17/06/20] 訪客 於文章「電影:千禧三部曲I:龍紋身的女孩(The...」留言:
    該書作者(已故)致力於反法西斯,本人在此提出警告:本土法西斯...
  • [17/03/13] 68國語言翻譯公司 於文章「[轉貼]宇宙開發產業的 Linux...」留言:
    然學到以問裡們是向本就中你相在可理出到時,。 Men ...

文章精選

文章搜尋

留言板