<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>yucco's blog</title>
	<link>http://yucco.egloos.com</link>
	<description>Nothing.</description>
	<language>ko</language>
	<pubDate>Thu, 19 Nov 2009 02:30:05 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>yucco's blog</title>
		<url>http://pds3.egloos.com/logo/200612/26/51/d0019651.jpg</url>
		<link>http://yucco.egloos.com</link>
		<width>80</width>
		<height>60</height>
		<description>Nothing.</description>
	</image>
  	<item>
		<title><![CDATA[ 모바일 App 개발자 사이투 ]]> </title>
		<link>http://yucco.egloos.com/2328964</link>
		<guid>http://yucco.egloos.com/2328964</guid>
		<description>
			<![CDATA[ 
  <a href="http://developer.itopping.co.kr/"><span style="FONT-FAMILY: Verdana">http://developer.itopping.co.kr/</span></a><span style="FONT-FAMILY: Verdana">&nbsp;(SKT)<br></span><a href="http://www.samsungiq.com/"><span style="FONT-FAMILY: Verdana">http://www.samsungiq.com/</span></a><span style="FONT-FAMILY: Verdana">&nbsp;(Samsung)<br><a href="http://market.android.com/publish/receipt">http://market.android.com/</a>&nbsp;(Google)</span>			 ]]> 
		</description>
		<category>Writings</category>

		<comments>http://yucco.egloos.com/2328964#comments</comments>
		<pubDate>Tue, 26 May 2009 06:00:18 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Telephony 약어 정리 ]]> </title>
		<link>http://yucco.egloos.com/2323280</link>
		<guid>http://yucco.egloos.com/2323280</guid>
		<description>
			<![CDATA[ 
  <p><span style="font-family: Verdana;"><a href="http://www.mobile-phone-directory.org/Glossary/C/CLIR.html"><strong>http://www.mobile-phone-directory.org/Glossary/C/CLIR.html</strong></a><br />
</span></p><p>http://blog.naver.com/exotica/10006850317<br />
<span style="font-family: Verdana;"></span></p><p><span style="font-family: Verdana;"><strong><br />
</strong></span></p><p><span style="font-weight: bold;">ACP </span>: ATM Cell Processor</p><p><span style="font-weight: bold;">ALB</span> : ATM Link interface Block</p><p><span style="font-weight: bold;">AN</span> : Access Network</p><p><span style="font-weight: bold;">AN-AAA</span> : Access Network Authorization, Autehtication and Accounting</p><p><span style="font-weight: bold;">ASB</span> : ATM Switch Block</p><p><span style="font-weight: bold;">ATP</span> : Air Termination Processor</p><p>&nbsp;</p><p><span style="font-weight: bold;">BAN</span> : BSC ATM switch Network</p><p><span style="font-weight: bold;">BMB</span> : BTS Main Block</p><p><span style="font-weight: bold;">BMP</span> : BSC Main Processor</p><p><span style="font-weight: bold;">BOC</span> : Burst Operation Control</p><p><span style="font-weight: bold;">BSC</span> : Base Station Controller</p><p><span style="font-weight: bold;">BSM</span> : Base Station Manager</p><p><span style="font-weight: bold;">BTS</span> : Base station Tranciever System</p><p>&nbsp;</p><p><span style="font-weight: bold;">CAC</span> : Call Admition Control</p><p><span style="font-weight: bold;">CE </span>: Channel Elements</p><p>&nbsp;</p><p><span style="font-weight: bold;">DAB</span> : Digital Amplifier Block</p><p><span style="font-weight: bold;">DCN</span> : Data Core Network</p><p><span style="font-weight: bold;">DLM</span> : DLR Local Manager</p><p><span style="font-weight: bold;">DLR</span> : Data Location Register</p><p><span style="font-weight: bold;">DMAU</span> :&nbsp; Digital Multi-carrier Amplifier Units</p><p><span style="font-weight: bold;">DRC</span> : Data Rate Control</p><p>&nbsp;</p><p><span style="font-weight: bold;">GAN</span> : General ATM switch Network</p><p><span style="font-weight: bold;">GAP</span> : GAN main Processor</p><p>&nbsp;</p><p><span style="font-weight: bold;">HAB</span> : Hardware Alarm collecting Block</p><p>&nbsp;</p><p><span style="font-weight: bold;">IMA</span> : Inverse Multiplexing on ATM</p><p><span style="font-weight: bold;">IMSI</span> : international Mobile Station Indentity</p><p><span style="font-weight: bold;">IWF </span>: InterWorking Function</p><p>&nbsp;</p><p><span style="font-weight: bold;">MSC</span> : Mobile Switching Center</p><p>&nbsp;</p><p><span style="font-weight: bold;">NAI</span> : Network Access Indentifier</p><p><span style="font-weight: bold;">NSB</span> : Network Synchronization Block</p><p>&nbsp;</p><p><span style="font-weight: bold;">PDSN</span> : Packet Data Serving Node</p><p><span style="font-weight: bold;">PPS</span> : Packet Per Second</p><p>&nbsp;</p><p><span style="font-weight: bold;">RLP</span> : Radio Link Protocol</p><p><span style="font-weight: bold;">RPP</span> : Radio Packet interface Processor</p><p>&nbsp;</p><p><span style="font-weight: bold;">SCH</span> : Supplimental CHannel</p><p><span style="font-weight: bold;">SDU</span> : Select and Distribute Unit</p><p>&nbsp;</p><p><span style="font-weight: bold;">TAN</span> : Top ATM switch Network</p><p><span style="font-weight: bold;">TAN BSM</span> : TAN Base Station Manager</p><p><span style="font-weight: bold;">TCB</span> : TransCoder Block</p><p>&nbsp;</p><p><span style="font-weight: bold;">UATI</span> : Unicast Access Terminal Indentifier</p><p><span style="font-weight: bold;">UCPA </span>: Universal Control Processor board Assembly</p><p>&nbsp;</p><p><span style="font-weight: bold;">VCN </span>: Voice Core Network<br />
</p><p><span style="font-family: Verdana;"><strong><br />
</strong></span></p><p><span style="font-family: Verdana;"><strong>VSP</strong> (Virtual Serial Port)<br />
<br />
<strong>DDTM</strong> (Data Dedicated Transmission Mode)<br />
<br />
<strong>HDR</strong> (High Data Rate)<br />
<br />
<strong>MIP</strong> (Mobile IP)<br />
<br />
<strong>NAI</strong> (Network Access Identifier)<br />
<br />
<strong>TAPI</strong> (Telephony API)<br />
<br />
<strong>IMSI</strong> (International Mobile Subscriber Identity)<br />
- 15자리의 숫자코드를 사용하여 개별 사용자 식별 : GSM에서 사용<br />
</span><span style="font-family: Verdana;">- IMSI 구성요소<br />
&nbsp; 1. 모바일 국가 코드<br />
&nbsp;&nbsp;2. 모바일 네트워크 코드<br />
&nbsp;&nbsp;3. 모바일 가입자 코드<br />
<br />
<strong>PIN</strong> (Personal Identify Number)&nbsp;<br />
- is a 4 to 8 digit access code which can be used to secure your mobile telephone from unauthorized use.</span></p><p><br />
<span style="font-family: Verdana;"><strong>PIN2</strong> (Personal Identity Number 2) <br />
- is another 4 to 8 digit access code which can be used to access the priority number memory and review telephone call charges.<br />
<br />
<strong>PUK</strong> (Personal Unblocking Key) <br />
- and PUK2 are used to unlock the PIN and PIN 2 codes respectively if your Subscriber Identity Module(SIM) card is locked.<br />
<br />
<strong>BTS</strong> (Base Transceiver Station)<br />
- 송수신 기지국(Base Transceiver Station). 이동 전화 시스템의 고정 요소에는 송신-수신 유닛과 다수의 안테나가 포함되어 있다. 이렇게 결합된 시스템 (흔히, 다중의 공동 배치 시스템 및 연동 방향성 안테나를 포함한다)을 송수신 기지국(BTS)으로 칭한다. <br />
<br />
<strong>TX/RX</strong> (Transmit/Receive)<br />
<br />
<strong>TSP</strong> (Telephony Service Provider)<br />
- 일종의 Interface (Service 공급자/사업자가 아님)<br />
<br />
<strong>GPRS</strong> (general packet radio services)<br />
- 패킷 기반 무선통신 서비스, GSM 기반 <br />
<br />
<strong>HDLC</strong> (High-Level Data Link Control)<br />
<br />
<strong>DTE</strong> (Data Terminal Equipment) <br />
- 데이터를 처리하는 장치 ex) 컴퓨터<br />
<br />
<strong>DCE</strong> (Data Communication Equipment) <br />
- 데이터를 전송하는 장치 ex) 모뎀 <br />
<br />
<strong>TE2</strong>&nbsp;(Cellular User's Terminal Equipment) (Terminal Equipment type 2)<br />
<br />
<strong>IMEI</strong> (International Mobile Equipment Identity)<br />
<br />
<strong>CISS</strong> (Call Independent Supplementary Service)<br />
<br />
<strong>CLI </strong>(Calling Line Identification)<br />
<br />
<strong>CLIR</strong> (Calling Line Identification Restriction)<br />
<br />
<strong>CUG</strong> (Closed User Group)<br />
<br />
<strong>PSTN </strong>(Public Switching Telephone Network)<br />
</span><span style="font-family: Verdana;">PSTN은 Fixed Telephone Network, 쉽게 말해서 공중가입자 전화망,즉 일반적으로 말하는 전화를 말한다<br />
</span><span style="font-family: Verdana;"><br />
<strong>PLMN </strong>(Public Land Mobile Network)<br />
</span><span style="font-family: Verdana;">PLMN은 Mobile Calluar Telephone Network, 모바일 이동통신망<br />
</span><span style="font-family: Verdana;"><br />
<strong>PSDN </strong>(Public Switching Data Network)<br />
</span><span style="font-family: Verdana;">PSDN은 공중데이터교환망 또는 그냥 패킷 교환망이라고도 한다.<br />
2진 데이터 신호를 일정한 길이로 나눈것을 패킷이라 하는데 이러한 패킷들을 저장,송출하면서 비동기적으로 송수신 하는 교환망을 뜻한다.<br />
쉽게 말해서 하이텔,천리안과 같이 사업자가 일반인(공중)에게 데이타 서비스를 제공하는 망을 말한다. <br />
<br />
<strong>NITZ</strong> (Network Identity and Time Zone)<br />
<br />
<strong>CCBS</strong> (Completion of Calls to Busy Subscriber)</span></p>			 ]]> 
		</description>
		<category>Telephony Tip</category>

		<comments>http://yucco.egloos.com/2323280#comments</comments>
		<pubDate>Wed, 20 May 2009 12:28:15 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SS String (Supplementary Service String) ]]> </title>
		<link>http://yucco.egloos.com/2284049</link>
		<guid>http://yucco.egloos.com/2284049</guid>
		<description>
			<![CDATA[ 
  <h2 style="MARGIN: 0cm 0cm 0pt"><div class="MsoHeader" style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: both; tab-stops: center 212.6pt"><span lang="EN-US" style="FONT-FAMILY: 굴림; mso-bidi-font-size: 10.0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p><span style="FONT-SIZE: 100%"></span></o:p></span></div></h2><div class="MsoHeader" style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: both; tab-stops: center 212.6pt"><span lang="EN-US" style="FONT-FAMILY: 굴림; mso-bidi-font-size: 10.0pt"><span style="FONT-SIZE: 100%"><span style="FONT-FAMILY: Verdana">GSM SPEC으로 규정되어 있는 사항으로 N/W에서 지원을 하고 있는 Supplementary Service (부가서비스) 를 메뉴에서 선택을 해서 실행을 시키는 대신, SPEC에 규정된 STRING만으로 SS 기능을 실행 할 수 있다. (사실 코드 상으로는 부가서비스 메뉴 실행은 SS 스트링을 네트워크로 전송하는 것으로 구현되어 있을 수 있다)<o:p></o:p></span></span></span></div><div class="MsoHeader" style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: both; tab-stops: center 212.6pt"><span lang="EN-US" style="FONT-FAMILY: 굴림; mso-bidi-font-size: 10.0pt"><span style="FONT-SIZE: 100%"><font size="+0"><span style="FONT-FAMILY: Verdana"><span style="mso-spacerun: yes">&nbsp;<br></span></span></font></span></span><span lang="EN-US" style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%">사용방법은 해당하는 문자열을 idle에서 직접 입력하는 것이다. 형식은 다음과 같다.<br><br><span style="FONT-FAMILY: Verdana">Activation<span style="mso-tab-count: 1">&nbsp;</span>:<span style="mso-tab-count: 1"> </span>*SC*SI#<o:p></o:p></span></span></span></div><div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: 67.0pt 151.2pt 187.2pt"><span lang="EN-US" style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%; FONT-FAMILY: Verdana">Deactivation<span style="mso-tab-count: 1">&nbsp;</span>:<span style="mso-tab-count: 1"> </span>#SC*SI#<br></span></span><span lang="EN-US" style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%; FONT-FAMILY: Verdana">Interrogation<span style="mso-tab-count: 1">&nbsp;</span>:<span style="mso-tab-count: 1">&nbsp;</span>*#SC*SI#<br></span></span><span style="FONT-SIZE: 100%"><span lang="EN-GB" style="FONT-FAMILY: 굴림"><br><span style="FONT-FAMILY: Verdana">- Service Code, SC( (2 or 3 digits): </span></span><span style="FONT-FAMILY: 굴림"><span style="FONT-FAMILY: Verdana">해당 부가서비스 코드<br>- Supplementary Information, SI (variable length) : 부가정보<br></span></span></span></div>			 ]]> 
		</description>
		<category>Telephony Tip</category>

		<comments>http://yucco.egloos.com/2284049#comments</comments>
		<pubDate>Tue, 07 Apr 2009 05:50:51 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Unit Test Pattern ]]> </title>
		<link>http://yucco.egloos.com/2202861</link>
		<guid>http://yucco.egloos.com/2202861</guid>
		<description>
			<![CDATA[ 
  <a href="http://www.codeproject.com/KB/architecture/autp5.aspx"><span style="FONT-FAMILY: Verdana">http://www.codeproject.com/KB/architecture/autp5.aspx</span></a>			 ]]> 
		</description>
		<category>Reference</category>

		<comments>http://yucco.egloos.com/2202861#comments</comments>
		<pubDate>Wed, 14 Jan 2009 01:13:56 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 너무 배고푸다... ]]> </title>
		<link>http://yucco.egloos.com/2180164</link>
		<guid>http://yucco.egloos.com/2180164</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-FAMILY: Verdana">춥고, 배고푸고.... 아... ㅠㅡㅠ</span>			 ]]> 
		</description>
		<category>Writings</category>

		<comments>http://yucco.egloos.com/2180164#comments</comments>
		<pubDate>Tue, 23 Dec 2008 11:54:20 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 에휴.... ]]> </title>
		<link>http://yucco.egloos.com/2158641</link>
		<guid>http://yucco.egloos.com/2158641</guid>
		<description>
			<![CDATA[ 
  <p><span style="FONT-SIZE: 100%; FONT-FAMILY: Verdana">좀 즐겁게 할 수 없나... 밑도 끝도 없이 즐겁게라는 단어만 찾고 있는 건 아닌지 싶고... 프로그래밍을 좋아하는데, 프로그래밍으로 먹고 사는 것이&nbsp;마냥 즐겁지만은 않고나!! `</span>&nbsp;</p>			 ]]> 
		</description>
		<category>Writings</category>

		<comments>http://yucco.egloos.com/2158641#comments</comments>
		<pubDate>Tue, 02 Dec 2008 13:59:15 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ YUV BPP ]]> </title>
		<link>http://yucco.egloos.com/2153370</link>
		<guid>http://yucco.egloos.com/2153370</guid>
		<description>
			<![CDATA[ 
  <p><span style="FONT-SIZE: 100%; FONT-FAMILY: Verdana">YUV 444 : 24 bpp<br>YUV 422 : 16 bpp<br>YUV 420 : 12 bpp<br></span></p>			 ]]> 
		</description>
		<category>Programming Tip</category>

		<comments>http://yucco.egloos.com/2153370#comments</comments>
		<pubDate>Fri, 28 Nov 2008 02:07:23 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ dot clock? pixel clock? ]]> </title>
		<link>http://yucco.egloos.com/2152035</link>
		<guid>http://yucco.egloos.com/2152035</guid>
		<description>
			<![CDATA[ 
  <p><span style="FONT-FAMILY: Verdana">dot clock 은 dot frequency 라고 보는 게 더 정확할 듯 싶다. dot 과 pixel 은 같은 말이니까, dot clock 은 1 pixel 을 그리는 속도를 나타내고 pixel clock 은 1 pixel 을 그리는 시간을 나타낸다.<br><br>아.놔. 헷갈.. ㅋ<br><br><br>원문&nbsp;&lt;&lt; Essential Linux Device Drivers &gt;&gt;<br><br>The <tt>D:</tt></span><a name="in the"></a><span style="FONT-FAMILY: Verdana">value in the output stands for the <span class="docEmphasis">dotclock</span></span><a name="draws pixels"></a><span style="FONT-FAMILY: Verdana">, which is the speed at which the video hardware draws pixels on the display. The value of 65.003MHz in the preceding output means that it'll take (1/65.003*1000000) or about 15,384 picoseconds for the video controller to draw a single pixel. This duration is called the <span class="docEmphasis">pixclock.</span><br><br><br></span></p>			 ]]> 
		</description>
		<category>System Tip</category>

		<comments>http://yucco.egloos.com/2152035#comments</comments>
		<pubDate>Thu, 27 Nov 2008 00:56:35 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 자료구조~ ]]> </title>
		<link>http://yucco.egloos.com/2140759</link>
		<guid>http://yucco.egloos.com/2140759</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-FAMILY: Verdana">요기 나온 것들은 다 이해하고 있어야 한다! (외우는 게 빠를까 ㅋ)</span><a href="http://en.wikipedia.org/wiki/List_of_data_structures"><br><br><span style="FONT-FAMILY: Verdana">http://en.wikipedia.org/wiki/List_of_data_structures</span></a>			 ]]> 
		</description>
		<category>Programming Tip</category>

		<comments>http://yucco.egloos.com/2140759#comments</comments>
		<pubDate>Mon, 17 Nov 2008 14:04:03 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 리눅스 커널 API 모음 ]]> </title>
		<link>http://yucco.egloos.com/2126035</link>
		<guid>http://yucco.egloos.com/2126035</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-FAMILY: Verdana"><a href="http://mystria.egloos.com/3723773">http://mystria.egloos.com/3723773</a><br><br>2장<br>insmod<br>modprobe<br>rmmod<br>실행 커널로 모듈을 적재하고 제거하는 사용자 영역 유틸리티</span><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/init.h&gt;<br>module_init(init_function);<br>module_exit(cleanup_function);<br>모듈 초기화 함수와 정리 함수를 지정하는 매크로</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/sched.h&gt;<br>sleeping관련 함수 변수, 드라이버의 Kernel API대부분의 정의<br>stuct task_struct *current;<br>현재 프로세스<br>current-&gt;pid<br>current-&gt;comm<br>현재 프로세스 ID와 명령 이름<br>obj-m<br>커널 빌드 시스템이 현재 디렉토리에서 빌드할 모듈을 파악하는데 사용하는 makefile심벌<br>/sys/module<br>적재된 모듈 정보를 포함하는 sys 디렉토리 층<br>/proc/modules<br>모듈 정보표시 가상 파일</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/module.h&gt;<br>#include &lt;linux/version.h&gt;</span></p><p><span style="FONT-FAMILY: Verdana">LINUX_VERSION_CODE<br>버전 의존성 확인 정수 매크로 #ifdef로 사용</span></p><p><span style="FONT-FAMILY: Verdana">EXPORT_SYMBOL (symbol);<br>EXPORT_SYMBOL_GPL (symbol);<br>심벌을 외부에 공개</span></p><p><span style="FONT-FAMILY: Verdana">MODULE_AUTHOR(author);<br>MODULE_DESCRIPTION(description);<br>MODULE_LICENSE(license_string);<br>MODULE_VERSION(version_string);<br>MODULE_DEVICE_TABLE(table_info);<br>MODULE_ALIAS(alternate_name);<br>모듈 정보를 목적파일에 삽입</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/moduleparam.h&gt;<br>module_param(variable, type, perm); // S_IRUGO<br>module_param_array(name, type, num, perm); // S_IRUGO<br>사용자가 지정할 수 있는 매개변수 만드는 매크로<br>bool, charp, int, invbool, long, short, ushort, uint, unlong, intarray</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/kernel.h&gt;<br>int printk(const char* fmt, ...);</span></p><p><br><span style="FONT-FAMILY: Verdana">3장<br>#include &lt;linux/types.h&gt;<br>dev_t<br>디바이스 번호 타입</span></p><p><span style="FONT-FAMILY: Verdana">int MAJOR(dev_t dev);<br>int MINOR(dev_t dev);<br>디바이스 번호에서 주, 부번호를 얻어냄</span></p><p><span style="FONT-FAMILY: Verdana">dev_t MKDEV(unsigned int major, unsigned int minor);<br>주, 부번호에서 dev_t 자료 아이템 생성</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/fs.h&gt;<br>파일시스템 함수<br>int register_chrdev_region(dev_t first, unsigned int count, char *name)<br>int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)<br>int unregister_chrdev_region(dev_t first, unsigned int count);<br>디바이스 번호를 할당/해제 reg:번호를 알때, alloc:동적 할당</span></p><p><span style="FONT-FAMILY: Verdana">int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);<br>major가 0이면 동적, 0이 아니면 그 번호 사용 커널 2.6버전 이전<br>int unregister_chrdev(unsigned int major, const char *name);<br>해제</span></p><p><span style="FONT-FAMILY: Verdana">struct file_operations;<br>문자 드라이버 메소드<br>struct file;<br>열린 파일 표현<br>struct inode;<br>디스크 상의 파일</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/cdev.h&gt;<br>struct cdev *cdev_alloc(void);<br>void cdev_init(struct cdev *dev, struct file_operations *fops);<br>int cdev_add(struct cdev *dev, dev_t num, unsigned int count);<br>void cdev_del(struct cdev *dev);<br>문자 디바이스 구조체 관리</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/kernel.h&gt;<br>container_of(pointer, type, field);<br>다른 구조체에 포함된 구조체 포인터 받아 해당 구조체를 포함하는 구조체 포인터를 반환</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/uaccess.h&gt;<br>커널 코드가 사용자 영역으로 자료 전송<br>unsigned long copy_from_user(void *to, const void *from, unsigned long count);<br>unsigned long copy_to_user(void *to, const void *from, unsigned long count);<br>사용자 영역과 커널 영역간 자료 복사</span></p><p><span style="FONT-FAMILY: Verdana">&nbsp;</span></p><p><span style="FONT-FAMILY: Verdana">5장<br>#include &lt;asm/semaphore.h&gt;<br>DECLARE_MUTEX(name);<br>DECLARE_MUTEX_LOCKED(name);<br>세마포어 정의, 초기화 매크로</span></p><p><span style="FONT-FAMILY: Verdana">void init_MUTEX(struct semaphore *sem);<br>void init_MUTEX_LOCKED(struct semaphore *sem);<br>실행 시점에서 세마포어 초기화</span></p><p><span style="FONT-FAMILY: Verdana">void down(struct semaphore *sem); // 호출 프로세스를 인터럽트 불가상태로 잠재움<br>int down_interruptible(struct semaphore *sem); // 시그널로 인터럽트 가능<br>int down_trylock(struct semaphore *sem); // 세마포어 불가시 함수 반환<br>void up(struct semaphore *sem); // 락을 해제<br>세마포어에 락을 걸고, 해제</span></p><p><span style="FONT-FAMILY: Verdana">struct rw_semaphore;<br>init_rwsem(struct rw_semaphore *sem);<br>읽기/쓰기 스레드 세마포어</span></p><p><span style="FONT-FAMILY: Verdana">void down_read(struct rw_semaphore *sem);<br>int down_read_trylock(struct rw_semaphore *sem);<br>void up_read(struct rw_semaphore *sem);<br>void down_write(struct rw_semaphore *sem);<br>"<br>"<br>void downgrade_write(struct rw_semaphore *sem);</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/completion.h&gt;<br>DECLARE_COMPLETION(name);<br>init_completion(struct completion *c); // 처음 초기화<br>INIT_COMPLETION(struct completion c); // 재초기화</span></p><p><span style="FONT-FAMILY: Verdana">void wait_for_completion(struct completion *c);<br>완료 시그널을 기다림<br>void complete(struct completion *c); // 스레드중 하나 깨움<br>void complete_all(struct completion *c); // 모든 대기자 깨움<br>완료 시그널 보냄<br>void complete_and_exit(struct completion *c, long retval);<br>완료 후 현 스레드에서 exit호출</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/spinlock.h&gt;<br>spinlock_t lock = SPIN_LOCK_UNLOCKED;<br>spin_lock_init(spinlock_t *lock);<br>스핀락 초기화 두 방법</span></p><p><span style="FONT-FAMILY: Verdana">void spin_lock(spinlock_t *lock); //_irqrestore, _irq, _bh<br>void spin_trylock(spinlock_t *lock); // 스핀하지 않음<br>void spin_unlock(spinlock_t *lock); // 스핀락 해제</span></p><p><br><span style="FONT-FAMILY: Verdana">rwlock_t lock = RW_LOCK_UNLOCKED<br>rwlock_init(rwlock_t *lock);<br>읽기/쓰기 스레드 락 초기화 시키는 두 방법<br>void read_lock(rwlock_t *lock); //_irqrestore, _irq, _bh<br>void read_unlock(rwlock_t *lock);<br>void write_lock(rwlock_t *lock);<br>void write_unlock(rwlock_t *lock);</span></p><p><br><span style="FONT-FAMILY: Verdana">#include &lt;asm/atomic.h&gt;<br>atomic_t v = ATOMIC_INIT(value);<br>int atomic_read(atomic_t *v);<br>void atomic_set(atomic_t *v, int i);<br>void atomic_add(int i, atomic_t *v);<br>void atomic_sub(int I, atomic_t *v);<br>void atomic_inc(atomic_t *v);<br>void atomic_dec(atomic_t *v);<br>int atomic_sub_and_test(int I, atomic_t *v);<br>int atomic_add_negative(int I, atomic_t *v);<br>int atomic_dec_and_test(atomic_t *v);<br>int atomic_inc_and_test(atomic_t *v);<br>int atomic_inc_return(atomic_t *v);<br>원자 정수 변수. atomic_t 변수는 위의 함수로만 접근 가능</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/bitops.h&gt;<br>void set_bit(int nr, void *addr);<br>void clear_bit(int nr, void *addr);<br>void change_bit(int nr, void *addr);<br>void test_and_set_bit(int nr, void *addr);<br>void test_and_clear_bit(int nr, void *addr);<br>void __set_bit(int nr, void *addr)<br>void __clear_bit(int nr, void *addr)<br>void __change_bit(int nr, void *addr)<br>원자 비트 변수. 플래그나 락 변수로 활용.</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/seqlock.h&gt;<br>seqlock_t lock = SEQLOCK_UNLOCKED;<br>seqlock_init(seqlock_t *lock);<br>unsigned int read_seqbegin_irqsave(seqlock_t *lock, unsigned long flags); // 읽기 권한 얻기<br>int read_seqretry_irqrestore(seqlock_t *lock, unsigned int seq, unsigned long flags); // 읽기 권한 얻기<br>void write_seqlock_irqsave(seqlock_t *lock, unsigned long flags); // 쓰기 권한 얻기<br>void write_seqlock_irq(seqlock_t *lock); // 쓰기 권한 얻기<br>void write_seqlock_bh(seqlock_t *lock); <br>void write_sequnlock_irqrestore(seqlock_t *lock, unsigned long flags); // 쓰기 권한 해제<br>void write_sequnlock_irq(seqlock_t *lock);<br>void write_sequnlock_bh(seqlock_t *lock);</span></p><p><br><span style="FONT-FAMILY: Verdana">#include &lt;linux/rcupdate.h&gt;<br>Read - Copy - Update 매커니즘을 사용하기 위한 해더<br>void rcu_read_lock();<br>void rcu_read_unlock();<br>Atomic 읽기 접근</span></p><p><span style="FONT-FAMILY: Verdana">void call_rcu(struct rcu_head *head, void (*func)(void *arg), *void arg);<br>모든 프로세서가 스케줄 되어 RCU 해제해도 안전할 때 수행할 콜백 등록 함수</span></p><p><br><span style="FONT-FAMILY: Verdana">6장<br>#include &lt;linux/ioctl.h&gt;</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/uaccess.h&gt;<br>int access_ok(int type, const void *addr, unsigned long size);<br>사용자 영역 포인터를 실제로 사용할 수 있는지 확인한다. 포인터를 참조해도 된다면 access_ok는 0이 아닌값 반환<br>type : VERIFY_READ, VERIFY_WRITE</span></p><p><span style="FONT-FAMILY: Verdana">int put_user(datum, ptr); // access_ok를 이미 호출<br>int __get_user(local, ptr); // __는 access_ok를 이미 호출했다고 가정<br>자료를 사용자 영역에서 가져오거나 저장 매크로, 전송 용량은 sizeof(*ptr)</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/capability.h&gt;<br>사용자 영역 프로세스의 능력을 지정<br>int capable(int capability);<br>프로세스에 주어진 capbility가 있으면 0이 아닌값 반환</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/wait.h&gt;<br>typedef struct { /*...*/ } wait_queue_head_t; // 명시적 초기화 필요<br>void init_waitqueue_head(wait_queue_head_t *queue); // 실행 시점에서 초기화<br>DECLARE_WAIT_QUEUE_HEAD(queue); // 컴파일 시점에서 초기화<br>리눅스 대기 큐에 대한 타입 정의 </span></p><p><span style="FONT-FAMILY: Verdana">void wait_event(wait_queue_head_t q, int condition);<br>void wait_event_interruptible(wait_queue_head_t q, int condition);<br>void wait_event_timeout(wait_queue_head_t q, int condition, int time);<br>void wait_event_interruptible_timeout(wait_queue_head_t q, int condition, int time);<br>주어진 컨디션이 참이 될 때 까지 큐에서 프로세스가 자게 만든다.</span></p><p><span style="FONT-FAMILY: Verdana">void wake_up(struct wait_queue **q);<br>void wake_up_interruptible(struct wait_queue **q); // interruptible한 프로세스만 깨움<br>void wake_up_nr(struct wait_queue **q int nr); // <br>void wake_up_interruptible_nr(struct wait_queue **q, int nr);<br>void wake_up_all(struct wait_queue **q);<br>void wake_up_interruptible_all(struct wait_queue **q);<br>void wake_up_interruptible_sync(struct wait_queue **q);<br>큐에서 잠든 프로세스를 깨운다. 일반적으로 상호배제 중인 프로세서 1개만</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/sched.h&gt;<br>set_current_state(int state);<br>현재 프로세스의 실행 상태를 설정<br>TASK_RUNNING<br>TASK_INTERRUPTIBLE<br>TASK_UNINTERRUPTIBLE</span></p><p><span style="FONT-FAMILY: Verdana">void schedule(void);<br>실행 큐에서 실행 가능 프로세스를 선택</span></p><p><span style="FONT-FAMILY: Verdana">typedef struct { /*...*/ } wait_queue_t; // 명시적 초기화 필요<br>init_waitqueue_entry(wait_queue_t *entry, struct task_struct *task);<br>wait_queue_t타입을 사용하여 프로세스를 대기 큐에 넣는다.</span></p><p><span style="FONT-FAMILY: Verdana">void prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state);<br>수작업으로 잠들기 구현</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/poll.h&gt;<br>void poll_wait(struct file *filp, wait_queue_head_t *q, poll_table *p)<br>현재 프로세스를 즉시 스케줄링하지 않고 대기 큐에 넣는다. 디바이스 드라이버의 poll메소드가 사용</span></p><p><span style="FONT-FAMILY: Verdana">int fasync_helper(struct inode *inode, struct file *filp, int mod, struct fasync_struct **fa);<br>//몰라</span></p><p><span style="FONT-FAMILY: Verdana">&nbsp;</span></p><p><br><span style="FONT-FAMILY: Verdana">7장<br>시간 맞추기<br>#incldue &lt;linux/param.h&gt;<br>HZ : 초당 클록 틱 수</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/jiffies.h&gt;<br>volatile unsigned long jiffies<br>u64 jiffies_64 // 매 클럭 틱마다 1씩 증가</span></p><p><span style="FONT-FAMILY: Verdana">int time_after(unsigned long a, unsigned long b);<br>int time_before(unsigned long a, unsigned long b);<br>int time_after_eq(unsigned long a, unsigned long b);<br>int time_before_eq(unsigned long a, unsigned long b);<br>지피를 안전하게 비교(오버플로우x)<br>u64 get_jiffies_64(void);<br>경쟁없이 지피값 가져옴</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/time.h&gt;<br>unsigned long timespec_to_jiffies(struct timespec *value);<br>void jiffies_to_timespec(unsigned long jiffies, struct timespec *value);<br>unsigned long timeval_to_jiffies(struct timeval *value);<br>void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);<br>지피를 다른 시각 표현으로, 시각을 지피로 변환</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/msr.h&gt;<br>rdtsc(low32,high32); // 32 32 둘다<br>rdtscl(low32); // 하위<br>rdtscll(var64); // 64 longlong 변수<br>타임스탬프 카운터를 읽는 매크로 x86 32bit*2</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/timex.h&gt;<br>cycles_t get_cycles(void);<br>플랫폼 의존적으로 타임스탬프 카운터 반환, 기능 지원X = 0</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/time.h&gt;<br>unsigned long mktime (unsigned int year, unsigned int mon,<br>&nbsp;&nbsp;&nbsp;unsigned int day, unsigned int hour,<br>&nbsp;&nbsp;&nbsp;unsigned int min, unsigned int sec);<br>년월일시분초 받아서 기준시부터 얼마나 흘렀는지 반환<br>void do_gettimeofday(struct timeval *tv);<br>현재시간을 기준 시각 이후 초와 마이크로초로 반환<br>struct timespec current_kernel_time(void);<br>1지피 resolution으로 현재시각을 반환</span></p><p><span style="FONT-FAMILY: Verdana">지연<br>#include &lt;linux/wait.h&gt;<br>long wait_event_interruptible_timeout(wait_queue_head_t *q, contion, signed long timeout);<br>현재 프로세스를 대기큐에 넣고 재움, 타임아웃은 지피값<br>#include &lt;linux/sched.h&gt;<br>signed long schedule_timeout(signed long timeout);<br>타임아웃 만료시 현재 프로세스가 깨어났음을 확인 후 스캐줄러 호출. 인터럽트 불가<br>호출자는 잠자기전에 set_current_state호출 해야함</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/delay.h&gt;<br>void ndelay(unsigned long nsecs);<br>void udelay(unsigned long usecs);<br>void mdelay(unsigned long msecs);<br>각 단위 지연<br>void msleep(unsigned int millisecs);<br>unsigned long msleep_interruptible(unsigned int millisecs);<br>void ssleep(unsigned int seconds)<br>주어진 밀리초 만큼 프로세스를 재움</span></p><p><br><span style="FONT-FAMILY: Verdana">커널 타이머<br>#include &lt;asm/hardirq.h&gt;<br>int in_interrupt(void); // 프로세스 context 밖<br>int in_atomic(void); // 스핀락, 인터럽트 스캐줄링 해서 안되는 경우<br>bool반환 호출 코드가 어떤 context에서 실행중인지 반환</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/timer.h&gt;<br>struct timer_list {<br>&nbsp;/* ... */<br>&nbsp;unsigned long expires;<br>&nbsp;void (*function)(unsigned long);<br>&nbsp;unsigned long data;<br>};<br>void init_timer(struct timer_list *timer);<br>struct timer_list TIMER_INITIALIZER(_function, _expires, _data);<br>timer_list 자료 구조체 초기화</span></p><p><span style="FONT-FAMILY: Verdana">void add_timer(struct timer_list * timer);<br>현재 CPU에서 실행하도록 타이머 구조체 등록<br>int del_timer(struct timer_list * timer);<br>int del_timer_sync(struct timer_list *timer); // 다른 CPU에서 실행중 아님을 보장<br>활성 타이머 목록에서 타이머 제거<br>int mod_timer(struct timer_list *timer, unsigned long expires);<br>이미 스케줄된 타이머 구조체의 만료시간 변경, add대신 사용가능<br>int timer_pending(const struct timer_list * timer);<br>타이머구조체를 이미 등록했는지 bool반환</span></p><p><span style="FONT-FAMILY: Verdana">태스크릿<br>#include &lt;linux/interrupt.h&gt;<br>struct tasklet_struct {<br>&nbsp;/* ... */<br>&nbsp;void (*func)(unsigned long);<br>&nbsp;unsigned long data;<br>};<br>void tasklet_init(struct tasklet_struct *t, void (*func)(unsigned long), unsigned long data);<br>이미 할당된 태스크릿 초기화<br>DECLARE_TASKLET(name, func, data);<br>DECLARE_TASKLET_DISABLED(name, func, data); // 비활성화 상태로 표시<br>태스크릿 구조체 정의<br>void tasklet_disable(struct tasklet_struct *t); // 다른 CPU에서 실행중일 경우 끝날때 까지 대기<br>void tasklet_disable_nosync(struct tasklet_struct *t); // 대기 안하고 반환<br>void tasklet_enable(struct tasklet_struct *t);<br>태스크릿을 활성/비활성화<br>void tasklet_schedule(struct tasklet_struct *t);<br>void tasklet_hi_schedule(struct tasklet_struct *t);<br>보통/ 높은 우선순위로 태스크릿 수행토록 스캐줄링<br>void tasklet_kill(struct tasklet_struct *t);<br>활성 태스크릿 목록에서 제거 // 다른 CPU에서 실행중일 경우 끝날때 까지 대기</span></p><p><span style="FONT-FAMILY: Verdana">작업큐<br>#include &lt;linux/workqueue.h&gt;<br>struct workqueue_struct;<br>struct work_struct;<br>작업큐와 작업항목 구조체</span></p><p><span style="FONT-FAMILY: Verdana">struct workqueue_struct *create_workqueue(const char *name); // 프로세서마다 작업자 스레드가 있는 작업큐 생성<br>struct workqueue_struct *create_singlethread_workqueue(const char *name); // 작업자 스레드가 하나뿐인 작업큐 생성<br>void destroy_workqueue(struct workqueue_struct *queue);<br>작업큐 생성/해제<br>DECLARE_WORK(name, void (*function)(void *), void *data);<br>INIT_WORK(struct work_struct *work, void (*function)(void *), void *data);<br>PREPARE_WORK(struct work_struct *work, void (*function)(void *), void *data);<br>작업큐항목 선언, 초기화<br>int queue_work(struct workqueue_struct *queue, struct work_struct *work);<br>int queue_delayed_work(struct workqueue_struct *queue, struct work_struct *work, unsigned long delay);<br>작업큐에 작업 삽입<br>int cancel_delayed_work(struct work_struct *work); // 작업 항목 제거<br>void flush_workqueue(struct workqueue_struct *queue); // 시스템에 실행 중인 작업큐 모두 제거</span></p><p><span style="FONT-FAMILY: Verdana">int schedule_work(struct work_struct *work);<br>int schedule_delayed_work(struct work_struct *work, unsigned long delay);<br>void flush_scheduled_work(void);<br>공유 작업 큐로 작업용</span></p><p><br><span style="FONT-FAMILY: Verdana">9장<br>#include &lt;linux/kernel.h&gt;<br>void barrier(void)<br>소프트웨어 메모리 장벽은 컴파일러에게 이 명령 전후 모든 메모리를 volatile접근으로 간주하라 요청</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/system.h&gt;<br>void rmb(void);<br>void read_barrier_depends(void);<br>void wmb(void);<br>void mb(void);<br>하드웨어 메모리 장벽은은 CPU와 컴파일러에게 이 명령 전후의 모든 메모리 읽기 쓰기 둘다를 점검하라 요청</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/io.h&gt;<br>unsigned inb(unsigned port);<br>void outb(unsigned char byte, unsigned port);<br>unsigned inw(unsigned port);<br>void outw(unsigned short word, unsigned port);<br>unsigned inl(unsigned port);<br>void outl(unsigned double word, unsigned port);<br>I/O port를 읽고 쓰는 함수</span></p><p><span style="FONT-FAMILY: Verdana">~_p I/O연산을 짧은 시간 지연할 필요가 있을 때.</span></p><p><span style="FONT-FAMILY: Verdana">void insb(unsigned port, void *addr, unsigned long count);<br>void outsb(unsigned port, void *addr, unsigned long count);<br>void insw(unsigned port, void *addr, unsigned long count);<br>"<br>"</span></p><p><span style="FONT-FAMILY: Verdana">문자열 함수, 입력 포트 -&gt; 메모리 영역, 메모리 영역 -&gt; 출력 포트 count 개수 만큼 자료 전송</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/ioport.h&gt;<br>struct resource *request_region(unsigned long start, unsigned long len, char *name);<br>void release_region(unsigned long start, unsigned long len);<br>int check_region(unsigned long start, unsigned long len);<br>I/O 포트 자원 할당자.</span></p><p><span style="FONT-FAMILY: Verdana">struct resource *request_mem_region(unsigned long start, unsigned long len, char *name);<br>void releas_mem_region(unsigned long start, unsigned long len);<br>int check_mem_region(unsigned long start, unsigned long len);<br>메모리 영역 자원 할당 처리 함수</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/io.h&gt;<br>void *ioremap(unsigned long phys_addr, unsigned long size);<br>void *ioremap_nocache(unsigned long phys_addr, unsigned long size);<br>void *iounmap(void *virt_addr);<br>ioremap은 물리적 주소 영역을 프로세서의 가상 주소 영역에 재사상하여 커널에서 사용할 수 있게 함, 사상 해제</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/io.h&gt;<br>unsigned int ioread8(void *addr); // 16, 32<br>void iowrite8(void *addr); // 16, 32<br>I/O 메모리 접근 함수</span></p><p><span style="FONT-FAMILY: Verdana">unsigned int ioread8_rep(void *addr); // 16, 32<br>void iowrite8_rep(void *addr); // 16, 32<br>I/O 메모리 접근 함수 반복</span></p><p><span style="FONT-FAMILY: Verdana">unsigned readb(address); /b, w, l<br>unsigned writeb(address); /b, w, l<br>memset_io(address, value, count);<br>memset_fromio(dest, source, nbyte);<br>memset_toio(dest, source, nbyte);<br>예전 함수</span></p><p><span style="FONT-FAMILY: Verdana">void *ioport_map(unsigned long port, unsigned int count);<br>void ioport_unmap(void *addr);<br>I/O 포트를 I/O 메모리처럼 취급하려면 포트를 ioport_map으로 넘긴다.</span></p><p><span style="FONT-FAMILY: Verdana">&nbsp;</span></p><p><span style="FONT-FAMILY: Verdana">10장<br>#include &lt;linux/interrupt.h&gt;<br>int request_irq(unsigned int irq, irqreturn_t (*handler)(), unsigned long flags, const char *dev_name, void *dev_id);<br>void free_irq(unsigned int irq, void *dev_id);<br>인터럽트 핸들러를 등록, 해제</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;linux/irq.h&gt;<br>int can_request_irq(unsigned int irq, unsigned long flags);<br>x86에서 사용 인터럽트 선 할당 성공시 0이 아닌 값 반환</span></p><p><span style="FONT-FAMILY: Verdana">#include &lt;asm/signal.h&gt;<br>SA_INTERRUPT 빠른 핸들러 설치<br>SA_SHIRQ 공유 핸들러<br>SA_SAMPLE_RANDOM 시스템 엔트로피 생성에 인터럽트 타임스탬프 사용</span></p><p><span style="FONT-FAMILY: Verdana">/proc/interrupt <br>/proc/stat<br>하드웨어 인터럽트와 설치된 핸들러에 대한 정보를 보여주는 파일 시스템의 노드</span></p><p><span style="FONT-FAMILY: Verdana">unsigned long probe_irq_on(void);<br>int probe_irq_off(unsigned long);<br>탐색과정에서 디바이스가 사용할 인터럽트 선을 결정할 때 드라이버에서 사용하는 함수.<br>인터럽트 생성 후 probe_irq_on결과를 probe_irq_off로 넘겨야한다.<br>probe_irq_off의 반환값은 감지한 인터럽트 번호</span></p><p><span style="FONT-FAMILY: Verdana">IRQ_NONE<br>IRQ_HANDLED<br>IRQ_RETVAL(int x)<br>인터럽트 핸들러가 반환할 수 있는 값</span></p><p><span style="FONT-FAMILY: Verdana">void disable_irq(int irq);<br>void disable_irq_nosync(int irq);<br>void enable_irq(int irq);<br>인터럽트 보고를 활성/비활성화. 공유처리기는 사용 불가</span></p><p><span style="FONT-FAMILY: Verdana">void local_irq_save(unsigned long flags);<br>void local_irq_restore(unsigned long flags);<br>현재 프로세서에서 인터럽트 비활성화 이전상태 기억 - 복구</span></p><p><span style="FONT-FAMILY: Verdana">void local_irq_disable(void);<br>void local_irq_enable(void);<br>현재 프로세서에서 인터럽트를 무조건 활성화/비활성화<br></span></p><!--       <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"		    xmlns:dc="http://purl.org/dc/elements/1.1/"		    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">       <rdf:Description	        rdf:about="http://mystria.egloos.com/3723773"	        dc:identifier="http://mystria.egloos.com/3723773"	        dc:title="임시... 고급 시스템 프로그래밍..."	        trackback:ping="http://mystria.egloos.com/tb/3723773"/>       </rdf:RDF>       -->			 ]]> 
		</description>
		<category>Linux System</category>

		<comments>http://yucco.egloos.com/2126035#comments</comments>
		<pubDate>Thu, 06 Nov 2008 00:43:19 GMT</pubDate>
		<dc:creator>유꼬</dc:creator>
	</item>
</channel>
</rss>
