ãã®è¨äºã¯Linux Advent Calendar 2014ã®25æ¥ç®ã§ãã½(=´â½`=)ï¾
ä»åã¯Linux Kernel Hackå
¥éç·¨ã¨ãããã¨ã§å
¥éçãªãã¨ãæ¸ãã¦ã¿ããã¨æãã¾ãã
ã¾ã使ç¨ããç°å¢ã§ããã©æè¿åºãã°ã£ãã®Fedora 21ã®Workstationã«ãã¾ãããã¾ããä»åã®å
容çã«ã¯ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã¯åããªããã§ãããå¤ãã®äººã馴æãã§ããã§ãããfedoraç³»ã¨ãããããã±ã¼ã¸ããã¼ã¸ã£ãyumã¨ãããã¨ã§ããã«ãã¦ã¿ã¾ããããèªåã¯æ®æ®µArch Linuxãªãã§ããã©ããã£ã¡ã ã¨kernelã®make installæã«ã¡ãã£ã¨ããã¹ã¯ãªãããæ¸ãå¿
è¦ããã£ããããã®ããã£ã¦ãfedoraã®ã»ããæè»½ããªã¨ããã®ãããã¾ãã
ã«ã¼ãã«ã³ã¼ãã»ãªã¼ãã£ã³ã°
ãã©ã¦ã¶ãã¼ã¹ã§ã³ã¼ãã»ãªã¼ãã£ã³ã°
èªããã½ã¼ã¹ã¯å¤§æ¦ã¡ã¤ã³ã©ã¤ã³ã®ã«ã¼ãã«ã¨ãããã¨ã«ãªãã¾ãããé常ã¯ããã§äºè¶³ããã¨æãã¾ããèªåã§ä½ããè¨å®ããªãã¦ãè¯ãã®ã§ãæè»½ã§ãããã©ã¦ã¶ã§è¦ãå ´åãfree-electrons.comããã®lxrã便å©ã§ãã
ãã¨ãå¿ãã¡ããããªãã®ãgithubã§ãããgithubã®å ´åãã¿ã°ã¸ã£ã³ãã¯ã§ãã¾ãããblameã¯webã¤ã³ã¿ã¼ãã§ã¼ã¹ã§ã§ããã®ã§
å®è£ ãã©ããªã£ã¦ããã®ããè¦ã¦è¡ãããå ´åã¯lxrããªãã§ããããå¦çãªã®ãï¼ã¨ã夿°ã®ç±æ¥çã ãç¥ãããå ´åã¯blameã§æ´å²ãé¡ãã®ãè¯ããã¨æãã¾ãã
ã¨ãã£ã¿ã§ã³ã¼ãã»ãªã¼ãã£ã³ã°
ã¨ãã£ã¿ã¯ã好ã¿ã®ãã®ã使ã£ã¦ãã ãããã¨ãã£ã¿ã§è¦ãå ´åã¯ctagsãªã©ã®ãã¼ã«ã便å©ã§ããããLinuxã®å ´åãmakeã®ã¿ã¼ã²ããã«ã¿ã°ãä½ãã¿ã¼ã²ãããããã¾ããmake helpã®åºåã®æç²ã§ãã以ä¸ã®3åãé¸ã¹ã¾ãã
tags/TAGS - Generate tags file for editors cscope - Generate cscope index gtags - Generate GNU GLOBAL index
èªåã§ã¿ã°ãä½ãå©ç¹ã¯ãããã¯ã¼ã¯unreachableãªç°å¢ã§ã使ãããä»»æã®ãã¼ã¸ã§ã³ã®ã½ã¼ã¹ã«å¯¾ãã¦ã¿ã°ãã¤ãããã®ã§ä¾ãã°tipããªã¼ã¨ãã¡ã¤ã³ã©ã¤ã³ä»¥å¤ã®ã³ã¼ãã»ãªã¼ãã£ã³ã°ããããããªãã¨ããã®ãããã¾ããã ã½ã¼ã¹ãgitã§cloneãã¦ããã°å½ç¶blameã¨ããä½¿ãæ¾é¡ã§ãã
ã·ã¹ãã ã³ã¼ã«ã®æ¢ããã
ã·ã¹ãã ã³ã¼ã«ã¯åºæ¬çã«ã¯sys_foobarã¨ããæãã§sys_ãä»ãã®ã§ãããã½ã¼ã¹ã³ã¼ãä¸ã¯ãããªã£ã¦ã¾ããã大æ¦ã¯SYSCALL_DEFINE[0-6]ã¨ãããã¯ãã使ããã¦ãã¾ããæå¾ã®æ°åã¯å¼æ°ã®æ°ã§ãã
ä¾ãã°getpid()ã¯ãããªãã¾ãã
1084 SYSCALL_DEFINE0(getpid) 1085 { 1086 return task_tgid_vnr(current); 1087 }
ãªã®ã§lxrã§ãgrepã§ãè¯ãã®ã§ãããã·ã¹ãã ã³ã¼ã«ãæ¢ãå ´åã¯SYSCALL_DEFINEã使ã£ãå½¢ãä¾ãã°getpid()ãªããSYSCALL_DEFINE0(getpitã§æ¢ãã¨è¦ã¤ããããã§ãã弿°ã®æ°ã¯ã¦ã¼ã¶ã¼ã©ã³ãå´ã§ã®å¼æ°ã®æ°ã¨ä¸ç·ãªã®ã§manãè¦ãã°ãããã¾ãããã¨ã¯socketé¢é£ã®ã·ã¹ãã ã³ã¼ã«ã¯socketcall(2)ãipcé¢é£ã¯ipc(2)ã¨ãã風ã«å¥ã®ã·ã¹ãã ã³ã¼ã«ã«ã¾ã¨ããããå ´åãããã®ã§ãã®è¾ºãããå¿ããªãã
ã«ã¼ãã«ã®æ©è½ãç¥ã
ã ãããä¸è¨ã®ã©ã¡ããã ã¨æãã¾ãã
- ç¹å®ã®æ©è½ã«ã¤ãã¦ç¥ãããå ´å
- å ¨è¬çã«ç¥ãããå ´å
åè ã®å ´åã¯ç®çãæç¢ºãªã®ã§ãããããåèªãã°ã°ãçã§èªãã¹ãã³ã¼ãã大ä½åããããããªããã¨ã
ã©ãããæãä»ãããè¯ãã®ãããããªãã¨ããã®ã¯å¾è
ã®å ´åã§ãããã¨ãããããå§ãããªãã®ã¯bootããèªãã§ãããã¿ã¼ã³ã§ãããªãã§ãã¨ããã¨ãbootå¦çã¨ããã®ã¯è²ã
ãªãã®ãåæåãã¦ããã®ã§ããã§ãã£ã¦ãããã¨ãç¥ããã¨æã£ããããããã«ã¤ãã¦ããç¨åº¦ã¯ç¥ããªãã¨ä½ããã£ã¦ãã®ãçè§£ãã«ããããã§ãããããæ©è½ããã£ã¦ããããåæè¨å®ãã©ããã£ã¦ãããã調ã¹ãã®ã«bootããã»ã¹ãè¦ãã®ã¯è¯ããã§ãããå
¨ä½ãç¥ãã«ã¯åãã¦ããªãã¨æãã¾ãã
ä»ã«ã¯ãåæåã¨åæåå¾ã®ãã¼ã¿ã使ãã®ã¯å¥ã®ã¿ã¤ãã³ã°ãªã®ã§bootã ãã¿ã¦ããã®æ©è½ã¯ããããããªãã¨ãããã使ã£ã¦ããã¨ããããã大äºã§ããããã£ã¦ã®ãããã¾ããããã¯ã«ã¼ãã«ãããªãã¦ãä¸ç·ã ã¨æãã¾ãã
ã§ãã§ã¯å ¨è¬çã«ç¥ãããå ´åã¯ã©ããããã£ã¦ãªãã¨ã½ã¼ã¹ãèªããããæ¬ãèªãã ã»ããè¯ãã¨æãã¾ããæ¥æ¬èªã§èªãã¦å ¨è¬çã«è§£èª¬ãã¦ããã¨ãªãã¨ä»¥ä¸ã®2åã§ããã
詳解LINUXã«ã¼ãã«
Linuxã«ã¼ãã«2.6è§£èªå®¤
ãããã®æ¬ã¯å ¨è¬çã«è§£èª¬ãã¦ããã®ã§Linuxã«ã¼ãã«ãæã£ã¦ãããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã¨ãã¦ã®åºæ¬çãªæ©è½ã«ã¤ãã¦ã¯ä¸éãå¦ã¹ãã¨æãã¾ãããã ãçºå£²ããçµæ§çµã£ã¦ããããä»ã®ã«ã¼ãã«ã¨ãããªãé¨åã¨ããã®ãå½ç¶ããã¾ããããããã§ãåºæ¬ãç¥ãã¨ããæå³ã§ã¯è¯ããã¨æãã¾ãã
webã§ã®æ å ±æºã¨ãã¦ã¯Linux Weekly Netã§ãããããã¯ææ°ã®ç¶æ³ãç¥ãã®ã«æã£ã¦æ¥ãã ã¨æãã¾ãã
ã«ã¼ãã«ãã«ã
ããã±ã¼ã¸ã¤ã³ã¹ãã¼ã«
Fedora 21ã®Workstationãå ¥ããã¨gitãªããã¯ãã§ã«å ¥ã£ã¦ããããã¾ãããgccãªããã¯å ¥ã£ã¦ããªãã®ã§ã¾ãã¯å¿ è¦ãªããã±ã¼ã¸ãã¤ã³ã¹ãã¼ã«ãã¾ãããã®è¾ºãå ¥ãã¦ããã°è¿½å ã§ä¾åããã±ã¼ã¸ãå ¥ãã¾ãã
[masami@fedora ~]$ sudo yum install ncurses-devel gcc patch ccache
gccã¨patchã¯èª¬æä¸è¦ã ã¨æãã¾ããncurses-develã¯ã«ã¼ãã«ã®è¨å®ãããã¨ãã«make menuconfigã§è¨å®ãããã®ã§ncurses-develãå ¥ãã¾ããä»ã®ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã®å ´åã¯ncursesã®ããããã¡ã¤ã«ã¨ããããããã±ã¼ã¸ãå ¥ãã¦ãã ãããccacheã¯ãã«ãããobjectãã¡ã¤ã«ããã£ãã·ã¥ãã¦ããã¦æ¬¡åç§»è¡ã®ãã«ããéããããã¨ããã¨ããã§ãã
kernel sourceã®ãã¦ã³ãã¼ã
ã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ãã¯gitã§cloneãããtar.xzã§ä¸å¼ãã¦ã³ãã¼ããfedoraã®src.rpmããã±ã¼ã¸ã使ãã¨ããæãããã¾ãããgitã§cloneããã®ãä¸çªæè»½ãããªãã§ãããããã¨ãããã¨ã§ãcloneãã¾ãã
[masami@fedora ~]$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux-kernel
cloneãçµãã£ãããã©ã³ãåã£ã¦ããã§ãã«ããã¾ããããã«ã¼ãã«ã®ãã¼ã¸ã§ã³ã¯3.18ã使ã£ã¦ã¿ããã¨æãã¾ãã
[masami@fedora linux-kernel]$ git checkout -b mykernel v3.18
ã«ã¼ãã«ã®ã³ã³ãã£ã°
次ã«ã«ã¼ãã«ã®è¨å®ããããã¨æãã¾ããããã§ã©ããªæ©è½ãæå¹ã«ããããè¨å®å¤ãã©ããããã£ã¦ãã¨ããã¦ããã¾ãããä»åã¯ä»èªã¿è¾¼ã¾ãã¦ããã¢ã¸ã¥ã¼ã«ããã¼ã¹ã¨ããconfigããããã¨æãã¾ãã
ãã®å ´åã®ã¿ã¼ã²ããã¯localmodconfigã§ãã
[masami@fedora linux-kernel]$ make localmodconfig
ãã®å¾è²ã ã¨æ©è½ãã©ããããèããã¦ãã¾ããå ¨é¨Enterãã¼æ¼ä¸ã§é£ã°ãã¦ãã¾ãã¾ãããã ããã§æå°éã®è¨å®ã«ãªã£ã¦ããã¨æãã¾ãããããã«å¾®èª¿æ´ããããã®ã§æ¬¡ã¯menuconfigãè¡ãã¾ããmenuconfigã®å ´åãæ©è½menué ç®ã®ç§»åã¯ä¸ä¸ãselectãexitãªã©ã®ä¸ã«ããã¡ãã¥ã¼ã¯å·¦å³ãã¼ã§ç§»åã§ãã¾ããæ±ºå®ã¯Enterãã¼ã§ãã
ã¾ãã¯ãGeneral setup -> Local Versionã鏿ãã¾ãã
ãããããé©å½ãªååãã¤ãã¾ããããOKãæ¼ãã¦ã¡ãã¥ã¼ã«æ»ãã¨ãããªãã¯ãã§ãã
ããããExitãæ¼ãã¦General setupãæããããä¸åº¦Exitãæ¼ãã¾ããããããã¨saveãããèãããã®ã§yesã鏿ãã¦å®äºã§ãã
makeã®ã¿ã¼ã²ããã«ã¤ãã¦ã¯Linux Advent Calendar 2014ã®7æ¥ç®ãsatoru_takeuchiããã®ãlinux kernelã®makeã¿ã¼ã²ããã«ã¤ãã¦ã®ããããããåèã«ãªãã¾ãã
make
configãçµãã£ãããã«ãã§ããmakeã®ã¿ã¼ã²ããã¯bzImageã§ããmakeã¯ä¸¦åã«è¡ãããã®ã§-Jãªãã·ã§ã³ãã¤ãã¾ãããã 使ç¨å¯è½ãªcoreæ°ã4ãªã®ã§-jã«4ãæ¸¡ãã¦ãã¾ããccacheãå¿ããã«ã
[masami@fedora linux-kernel]$ nproc 4 [masami@fedora linux-kernel]$ ccache make -j4 bzImage
æå¾ã«ãããªåºåãåºã¦ãã°ç¡äºã«makeå®äºã§ãã
OBJCOPY arch/x86/boot/setup.bin BUILD arch/x86/boot/bzImage Setup is 16124 bytes (padded to 16384 bytes). System is 5545 kB CRC 318250a6 Kernel: arch/x86/boot/bzImage is ready (#1)
bzImageãåºæ¥ããæ¬¡ã¯moduleããã«ããã¾ãã
[masami@fedora linux-kernel]$ ccache make -j4 modules
ãããä½äºããªãã·ã§ã«ã®ããã³ããã«æ»ã£ã¦ããã°å®äºã§ãã
install
次ã«ã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ã/lib/ã«ã¤ã³ã¹ãã¼ã«ãã¾ããããã¯root権éãå¿ è¦ã§ãã
[masami@fedora linux-kernel]$ sudo make modules_install
ãã®å¾ã«ã /lib/modulesã«ä»ä½ã£ã3.18mykenelãããã¾ãããããã¾ã§ãã¦æãåºãããã§ãããLocal Versionãè¨å®ããã¨ãã«å é ã®æåã¯"-"ã«ãã¨ããã»ãã綺éºã«è¦ããã¨æãã¾ãã3.18.0-mykernelã®ã»ããè¦ãããã¨æãã®ã§ã
[masami@fedora linux-kernel]$ ls /lib/modules 3.17.4-301.fc21.x86_64 3.18.0mykernel
次㫠installã¿ã¼ã²ããã§/bootã«ã«ã¼ãã«ã®é ç½®ãinitramfsã®ä½æããã¾ãã
[masami@fedora linux-kernel]$ sudo make install
ã¡ãªã¿ã«ãinstallã®å®è¡æã«/sbin/installkernelã¨ããã³ãã³ããå¼ã°ããããã/bootã«ãã¡ã¤ã«ãç½®ãããããã®ã§ãããã£ã¹ããªãã¥ã¼ã·ã§ã³ã«ãã£ã¦ã¯ãã®ã³ãã³ãããã¾ãããä¾ãã°Arch Linuxããã®ãããªå ´åãèªåã§/sbin/installkernelãä½ã£ãã»ããæ©ãã§ãããã®è¾ºã®èª¬æã¯ä»¥åã®ã¨ã³ããªãφ(.. )メモシテオコウ /sbin/installkernelを適当に作っておく - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモããåèã«ãã¦ãã ããã
make installãä½äºããªãã·ã§ã«ã®ããã³ããã«æ»ã£ã¦ããã°å®äºã§ãã
æå¾ã«grubã®configãæ´æ°ãã¦åèµ·åãã¾ãã
[masami@fedora linux-kernel]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
grubã®ã¡ãã¥ã¼ã«ä½ã£ãã«ã¼ãã«ãå ¥ã£ã¦ãã¾ãã
ãã°ã¤ã³ãããã«ã¼ãã«ã®ãã¼ã¸ã§ã³ã確èªãã¦ãã¾ãããã
[masami@fedora ~]$ uname -a Linux fedora 3.18.0mykernel #1 SMP Fri Dec 19 23:19:01 JST 2014 x86_64 x86_64 x86_64 GNU/Linux
æ°ããã«ã¼ãã«ã§èµ·åãã¦ãã¾ãããããã§ã«ã¼ãã«ã®ãã«ãã¯å®äºã§ãã
ã«ã¼ãã«ã¢ã¸ã¥ã¼ã«
hello worldä½ä½ãã®ããç´æãªæ°ãããã®ã§ã»ã»ã»
module_init()ã§ã¢ã¸ã¥ã¼ã«ãã¼ãæã®initå¦çãmodule_exit()ã§ã¢ã¸ã¥ã¼ã«ã¢ã³ãã¼ãæã®ã¯ãªã¼ã³ã¢ããå¦çãç»é²ãã¾ããå é ã®KBUILD_MODNAMEã¯printk()ã§èªåã®ã¢ã¸ã¥ã¼ã«åãåºãããã¨ãã«ä½¿ãæã§ããpr_infoã¯printk(KERN_INFOã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ã¼ã§ãã以ä¸ã®ã³ã¼ããhelloworld.cã¨ãã¦ä¿åãã¾ãã
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/module.h> #include <linux/kernel.h> MODULE_DESCRIPTION("Hello, World"); MODULE_AUTHOR("masami256"); MODULE_LICENSE("GPL"); static int helloworld_init(void) { pr_info("%s\n", __func__); return 0; } static void helloworld_cleanup(void) { pr_info("%s\n", __func__); } module_init(helloworld_init); module_exit(helloworld_cleanup);
Makefileã¯ãã¡ãã§ãã
KERNDIR := /lib/modules/`uname -r`/build BUILD_DIR := $(shell pwd) VERBOSE = 0 obj-m := helloworld.o smallmod-objs := helloworld.o all: make -C $(KERNDIR) SUBDIRS=$(BUILD_DIR) KBUILD_VERBOSE=$(VERBOSE) modules clean: rm -f *.o rm -f *.ko rm -f *.mod.c rm -f *~
ããã§makeãã¦ä½æãããhelloworld.koãinsmodãrmmodãã¦ããjournalctl -r -bã§ã«ã¼ãã«ã®ãã°ã確èªããã¨ä»¥ä¸ã®ããã«ãã°ãåºã¦ããã®ã確èªã§ãã¾ãã
-- Logs begin at Fri 2014-12-19 21:36:25 JST, end at Fri 2014-12-19 23:43:47 JST. -- Dec 19 23:43:47 fedora kernel: helloworld: helloworld_cleanup Dec 19 23:43:47 fedora sudo[2471]: masami : TTY=pts/0 ; PWD=/home/masami/helloworld ; USER=root ; COMMAND=/sbin/rmmod helloworld Dec 19 23:43:23 fedora kernel: helloworld: helloworld_init Dec 19 23:43:23 fedora kernel: helloworld: module verification failed: signature and/or required key missing - tainting kernel
ã«ã¼ãã«ãããã°
ã§ã¯ãæå¾ã«ãããã°ããã¾ãæåã«ã«ã¼ãã«ã®configãå¤ãã¾ããmake menuconfigã§Kernel hacking -> Memory debuggingã鏿ããKernel memory leak detectorãæå¹ã«ãä¸ã®Maximumãã4096ã«ãããä¿åãã¦ã«ã¼ãã«ã»ã¢ã¸ã¥ã¼ã«ããã«ããã¦ã¤ã³ã¹ãã¼ã«ãã¾ãã
åèµ·åãã¦dmesgã§ãã°ã確èªããã¨å ã»ã©æå¹ã«ããkmemleakãåæåãã¦éå§ããã®ããããã¾ãã
[masami@fedora ~]$ dmesg | grep kmemleak [ 7.004780] kmemleak: Kernel memory leak detector initialized [ 7.004790] kmemleak: Automatic memory scanning thread started
次ã«ãå ã»ã©ä½æããhelloworld.cã«ãã°ãåãè¾¼ã¿ã¾ãã
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/module.h> #include <linux/kernel.h> #include <linux/slab.h> MODULE_DESCRIPTION("Hello, World"); MODULE_AUTHOR("masami256"); MODULE_LICENSE("GPL"); static char *ptr; #define LEAK_DETECT_TEST() do { \ ptr = kmalloc(4, GFP_KERNEL); \ pr_info("ptr is 0x%p\n", ptr); \ } while(0) static int helloworld_init(void) { pr_info("%s\n", __func__); LEAK_DETECT_TEST(); LEAK_DETECT_TEST(); return 0; } static void helloworld_cleanup(void) { pr_info("%s\n", __func__); kfree(ptr); } module_init(helloworld_init); module_exit(helloworld_cleanup);
makeãã¦insmodã»rmmodããã¨ããã®ããã«ãã°ãã§ã¾ãã
[ 340.021392] helloworld: helloworld_init [ 340.021399] helloworld: ptr is 0xffff8802286da788 [ 340.021403] helloworld: ptr is 0xffff8802286da790 [ 349.762415] helloworld: helloworld_cleanup
kmemleakã§å³æscanã§ç¢ºèªãã¦ã¿ã¾ãã
[root@fedora helloworld]# echo scan > /sys/kernel/debug/kmemleak
ããã¦ããã°ãè¦ãã¨ãã®ããã«ã¡ã¢ãªã¼ãªã¼ã¯ãæ¤åºããã¾ããããä¸åãã£ã¦ãã°ãåºãªãã£ãå度試ãã¦ã¿ã¦ãã ããã
[ 479.691172] kmemleak: 1 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
æç¤ºã«ãããã£ã¦/sys/kernel/debug/kmemleakãè¦ã¦ã¿ã¾ããmemory leakããã§ããããªãã¸ã§ã¯ãã®ã¢ãã¬ã¹ã¯0xffff8802286da788ã¨åºã¦ãã¾ãããµã¤ãºã8ãªã®ã¯kmallocã®æä½ãµã¤ãºãåãä¸ãããã¦ããããã§ãã夿°ã¯åæåãã¦ããªãã®ã§hex dumpã®ä¸èº«ã¯ä»åã¯ç¡æå³ã§ãããcommã¯ããã°ã©ã åãpidã¯commã®pidã§ããã¡ã¢ãªã¼ãªã¼ã¯ã®å ´åãã¡ã¢ãªç¢ºä¿ã®ã¿ã¤ãã³ã°ã¨ãªã¼ã¯ã®ã¿ã¤ãã³ã°ãéãã®ã§ããã¯ã¨ã¬ã¼ã¹ã ãã ã¨çµæ§è¿½ãã®å¤§å¤ã§ãããã³ãã¨ãã¦ã¯ã§ããã®ã§éè¦ã§ãã
[root@fedora helloworld]# cat /sys/kernel/debug/kmemleak unreferenced object 0xffff8802286da788 (size 8): comm "insmod", pid 1934, jiffies 4295007317 (age 212.238s) hex dump (first 8 bytes): 90 a7 6d 28 02 88 ff ff ..m(.... backtrace: [<ffffffff8173863e>] kmemleak_alloc+0x4e/0xc0 [<ffffffff811f042c>] kmem_cache_alloc_trace+0x13c/0x250 [<ffffffffa033d034>] 0xffffffffa033d034 [<ffffffff81002148>] do_one_initcall+0xd8/0x210 [<ffffffff81119b1d>] load_module+0x209d/0x27c0 [<ffffffff8111a406>] SyS_finit_module+0xa6/0xe0 [<ffffffff81746d69>] system_call_fastpath+0x12/0x17 [<ffffffffffffffff>] 0xffffffffffffffff
ã¨ã¾ãããããªæãã§ãµã¯ãã¨ã¾ã¨ãã¦ã¿ã¾ãããå ¥éã®åã£æããã«ãªãã°å¹¸ãã§ãm(__)m
宣ä¼ã§ãï½ãæä¸åãã¼ã¹ã§ç§èåã§ãã¼ããLinuxã«ã¼ãã«ã«çµã£ãããããä¼ããã£ã¦ã¾ãã®ã§ãèå³ã®ããæ¹ã¯ã©ããã
æå¾ã«ãããã§Linux Advent Calendar 2014ãçµããã«ãªãã¾ãã
è¨äºãæç¨¿ãã¦ãããknokãããsatoru_takeuchiãããmzyy94ãããhiraku_wfsãããfurandon_pigãããtenforwardãããxoxyuxuãããakachochinãããyunon_physãããshigemk2ãã,
ããã¦èªãã§ãããçããããããã¨ããããã¾ããm(__)m

ããä¸åã§å®å ¨çè§£ Linuxã«ã¼ãã«è¶ å ¥éï¼æ¥çµBP Next ICT鏿¸ï¼
- ä½è : æ¥çµLinux
- åºç社/ã¡ã¼ã«ã¼: æ¥çµBP社
- çºå£²æ¥: 2014/10/16
- ã¡ãã£ã¢: Kindleç
- ãã®ååãå«ãããã°ãè¦ã