Booyo LiveCD/Make Ash
BooyoLiveCD/MakeAsh ¶download http://developer.linuxtag.net/knoppix/sources/ash-knoppix-26_0.2-4.tar.gz
tar zxvf ash-knoppix-26_0.2-4.tar.gz
modutils-2.4.15 module-init-tools-3.0
292 rm -Rf module*
293 rm -Rf modut*
DEFINE _LINUX_SOURCE 필요
dietlibc install
rpm -ivh module-init-tools-4.1-0.pre5.3.src.rpm
need to compare insmod.c in bltin and module-init-tools-3.0
edit Makefile
insert CC=diet gcc -O2 -Os
edit CFLAGS = $(RPM_OPT_FLAGS) -DSHELL -D_LINUX_SOURCE -I/usr/src/linux/include -I. -DBIT_TYPES_DEFINED
edit mystring.h
rm strlen
edit bltin/rmmod.c
"Usage: rmmod ?-a | module\n" "Usage: rmmod module\n"
cp /home/tcheun/ash-berry-0.2/bltin/losetup.c .
cp /home/tcheun/ash-berry-0.2/bltin/loop.h .
edit builtins
add losetup_main losetup
edit Makefile
add losetup.c losetuo.o
sh 이 만들어 지기는 했지만, 이 방법의 문제를 알게됨. insmod 를 sh 에 builtin 으로 만들경우, insmod 에서 오류가 생기면, sh 에서 빠져 나오므로, 결과적으로 부팅이 되지 않음. 별도의 insmod 를 사용하면, insmod 의 오류를 오류로 처리할 수 있슴. 현재의 모듈 중 fdomain.ko 에서 문제 발생. 이를 방지하기 위해 knopper 가 signal(SIGSEGV, SIG_IGN) 를 사용하였지만, 세그멘테이션 오류 발생하고 정지함. 디스켓을 사용한 부팅을 고려할 경우, insmod 를 sh 에 builtin 하는 것이 필요하지만, udev 로 인해 이미 디스켓을 사용한 부팅은 어려워 진 것이 아닌가?
insmod 에 의해 sh 이 죽을 가능성이 너무 많으므로, insmod.static 를 사용하기로 함.
Makefile ¶bltin 에서 insmod 를 빼고, losetup 과 pivot_root 를 추가하였슴. (SRCS, OBJ2)
insmod 는 module-init-tools-3.0 의 insmod.o 를 사용함.
MOD_OBJ = ./module-init-tools-3.0/insmod.o
CFLAGS 의 include 부분을 제거함.
all 의 경우 MOD_OBJ 추가
bltin 디렉토리 밑에 knoppix 의 경우는 insmod.c 가 있고, berry 의 경우는 loop.h, losetup.c. pivot_root.c 가 있슴.
bltin/mount.c ¶/*
#include "../builtins.h"
const char *pm="/proc/mounts";
knoppix 그대로 사용해도 됨. (수정하였슴) 아마 bltin/cat.c 의 수정 또는 bug fix 일 것 같음.
builtins ¶/*
insmodcmd insmod
*/
insmod_main insmod
losetup_main losetup
pivot_root_main pivot_root
mkinit.c ¶/*
for (p = line1 + 6 ; *p != '=' && *p != '/' ; p++);
*/
for (p = line1 + 6 ; *p != '=' && *p != '/' && *p != '\n' ; p++);
읽어 보아야 할까?
module-init-tools-3.0/insmod.c ¶/*
return;
int main(int argc, char *argv[])
return(0);
return(1);
*/
exit(1);
int insmod_main(int argc, char *argv[])
exit(0);
exit(1);
module-init-tools-3.0/modinfo.c ¶/*
try_old_version("modinfo", argv);
*/
if (!getenv("NEW_MODINFO"))
try_old_version("modinfo", argv);
parser.c ¶/*
putprompt(ps1val());
*/
int i, n;
char pwd256;
if (getcwd(pwd, 256)) {
읽어 볼 것.
i=0;
while (i < 256 && pwdi != '\0') i++;
if (pwdi-1 == '/') pwdi++='/'; /* for / */
pwdi++=']';
n=0;
while (*(ps1val()+n) != '\0') { pwdi++=*(ps1val()+n); n++; }
pwdi='\0';
while (i >= 0 && pwdi != '/') i--;
if (pwdi-1 == '/') i--; /* for / */
pwdi='[';
putprompt(&pwdi);
} else {
putprompt(ps1val());
}
|
You are unscrupulously dishonest, false, and deceitful. |











