요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
#!/bin/sh
#
# config3270 -- Autoconfigure /dev/3270/* and /etc/inittab
#
# Usage:
# config3270
#
# Output:
# /tmp/mkdev3270
#
# Operation:
# 1. Run this script
# 2. Run the script it produces: /tmp/mkdev3270
# 3. Issue "telinit q" or reboot, as appropriate.
#
P=/proc/tty/driver/tty3270
ROOT=
D=$ROOT/dev
SUBD=3270
TTY=$SUBD/tty
TUB=$SUBD/tub
SCR=$ROOT/tmp/mkdev3270
SCRTMP=$SCR.a
GETTYLINE=:2345:respawn:/sbin/mingetty
INITTAB=$ROOT/etc/inittab
NINITTAB=$ROOT/etc/NEWinittab
OINITTAB=$ROOT/etc/OLDinittab
ADDNOTE=\\"# Additional mingettys for the 3270/tty* driver, tub3270 ---\\"
if ! ls $P > /dev/null 2>&1; then
modprobe tub3270 > /dev/null 2>&1
fi
ls $P > /dev/null 2>&1 || exit 1
# Initialize two files, one for /dev/3270 commands and one
# to replace the /etc/inittab file (old one saved in OLDinittab)
echo "#!/bin/sh" > $SCR || exit 1
echo " " >> $SCR
echo "# Script built by /sbin/config3270" >> $SCR
if [ ! -d /dev/dasd ]; then
echo rm -rf "$D/$SUBD/*" >> $SCR
fi
echo "grep -v $TTY $INITTAB > $NINITTAB" > $SCRTMP || exit 1
echo "echo $ADDNOTE >> $NINITTAB" >> $SCRTMP
if [ ! -d /dev/dasd ]; then
echo mkdir -p $D/$SUBD >> $SCR
fi
# Now query the tub3270 driver for 3270 device information
# and add appropriate mknod and mingetty lines to our files
echo what=config > $P
while read devno maj min;do
if [ $min = 0 ]; then
fsmaj=$maj
if [ ! -d /dev/dasd ]; then
echo mknod $D/$TUB c $fsmaj 0 >> $SCR
echo chmod 666 $D/$TUB >> $SCR
fi
elif [ $maj = CONSOLE ]; then
if [ ! -d /dev/dasd ]; then
echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
fi
else
if [ ! -d /dev/dasd ]; then
echo mknod $D/$TTY$devno c $maj $min >>$SCR
echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
fi
echo "echo t$min$GETTYLINE $TTY$devno >> $NINITTAB" >> $SCRTMP
fi
done < $P
echo mv $INITTAB $OINITTAB >> $SCRTMP || exit 1
echo mv $NINITTAB $INITTAB >> $SCRTMP
cat $SCRTMP >> $SCR
rm $SCRTMP
exit 0
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
tub3270 조회 결과로 /tmp/mkdev3270 생성
1-76`config3270`은 s390의 3270 터미널 장치 노드와 `/etc/inittab` 항목을 구성하기 위한 셸 스크립트 생성기입니다. 이 스크립트를 한 번 실행하면 `/tmp/mkdev3270`이 만들어지고, 사용자는 그 결과 스크립트를 실행한 다음 상황에 따라 `telinit q`를 수행하거나 재부팅해야 합니다.
중요한 경계는 현재 스크립트와 생성된 스크립트의 역할이 다르다는 점입니다. 현재 스크립트는 필요하면 `tub3270` 모듈을 적재하고 `/proc/tty/driver/tty3270`을 조회하며 임시 파일을 작성합니다. 실제 `mknod`, `chmod`, `/etc/inittab` 교체 명령은 대부분 `/tmp/mkdev3270` 안에 기록되어 그 파일을 실행할 때 적용됩니다.
장치 정보는 `echo what=config > /proc/tty/driver/tty3270`으로 요청하고 각 행을 `devno maj min`으로 읽습니다. `min = 0`인 행은 파일 시스템 문자 장치의 주 번호를 `fsmaj`에 저장하고, `maj = CONSOLE`인 행은 콘솔용 `tub` 장치만 준비하며, 나머지 행은 `tty`와 `tub` 장치 및 대응하는 `mingetty` 항목을 생성합니다.
첫 실행은 드라이버 정보를 바탕으로 명령 파일을 만들고, 두 번째 실행이 장치 노드와 inittab 변경을 적용합니다.
원문 16-29줄에서 생성 대상과 중간 파일 이름을 조립합니다.
원문 31-48줄은 조회 인터페이스를 확인하고 두 생성 파일의 머리 부분을 준비합니다.
원문 52-69줄에서 proc 응답 한 행이 생성 명령으로 변환되는 규칙입니다.
원문 72-76줄은 설정 교체 명령을 최종 파일에 합칩니다.
주석과 빈 줄을 포함한 76줄 전체를 기능 단위로 대응시킵니다.
아래 코드는 Linux v6.18.37 원문 1-76줄 전체입니다. 표시 안정성을 위해 탭만 여덟 칸으로 정규화했으며 경로, 변수명, 셸 조건, 리디렉션, 장치 번호, `mknod`·`mingetty` 명령, 주석과 줄 순서는 변경하지 않았습니다.
#!/bin/sh
#
# config3270 -- Autoconfigure /dev/3270/* and /etc/inittab
#
# Usage:
# config3270
#
# Output:
# /tmp/mkdev3270
#
# Operation:
# 1. Run this script
# 2. Run the script it produces: /tmp/mkdev3270
# 3. Issue "telinit q" or reboot, as appropriate.
#
P=/proc/tty/driver/tty3270
ROOT=
D=$ROOT/dev
SUBD=3270
TTY=$SUBD/tty
TUB=$SUBD/tub
SCR=$ROOT/tmp/mkdev3270
SCRTMP=$SCR.a
GETTYLINE=:2345:respawn:/sbin/mingetty
INITTAB=$ROOT/etc/inittab
NINITTAB=$ROOT/etc/NEWinittab
OINITTAB=$ROOT/etc/OLDinittab
ADDNOTE=\\"# Additional mingettys for the 3270/tty* driver, tub3270 ---\\"
if ! ls $P > /dev/null 2>&1; then
modprobe tub3270 > /dev/null 2>&1
fi
ls $P > /dev/null 2>&1 || exit 1
# Initialize two files, one for /dev/3270 commands and one
# to replace the /etc/inittab file (old one saved in OLDinittab)
echo "#!/bin/sh" > $SCR || exit 1
echo " " >> $SCR
echo "# Script built by /sbin/config3270" >> $SCR
if [ ! -d /dev/dasd ]; then
echo rm -rf "$D/$SUBD/*" >> $SCR
fi
echo "grep -v $TTY $INITTAB > $NINITTAB" > $SCRTMP || exit 1
echo "echo $ADDNOTE >> $NINITTAB" >> $SCRTMP
if [ ! -d /dev/dasd ]; then
echo mkdir -p $D/$SUBD >> $SCR
fi
# Now query the tub3270 driver for 3270 device information
# and add appropriate mknod and mingetty lines to our files
echo what=config > $P
while read devno maj min;do
if [ $min = 0 ]; then
fsmaj=$maj
if [ ! -d /dev/dasd ]; then
echo mknod $D/$TUB c $fsmaj 0 >> $SCR
echo chmod 666 $D/$TUB >> $SCR
fi
elif [ $maj = CONSOLE ]; then
if [ ! -d /dev/dasd ]; then
echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
fi
else
if [ ! -d /dev/dasd ]; then
echo mknod $D/$TTY$devno c $maj $min >>$SCR
echo mknod $D/$TUB$devno c $fsmaj $min >> $SCR
fi
echo "echo t$min$GETTYLINE $TTY$devno >> $NINITTAB" >> $SCRTMP
fi
done < $P
echo mv $INITTAB $OINITTAB >> $SCRTMP || exit 1
echo mv $NINITTAB $INITTAB >> $SCRTMP
cat $SCRTMP >> $SCR
rm $SCRTMP
exit 0
요약·해설
config3270.sh:1-76s390의 `tub3270` 드라이버 정보를 읽어 3270 문자 장치 노드와 `mingetty`용 inittab 갱신 명령을 담은 `/tmp/mkdev3270`을 생성하는 절차를 설명합니다.
이 파일은 실제 변경 명령을 바로 실행하는 대신 `/tmp/mkdev3270`에 기록합니다. 생성된 파일을 별도로 실행한 뒤 `telinit q` 또는 재부팅해야 하며, 기존 `/etc/inittab`은 `/etc/OLDinittab`으로 옮기도록 구성됩니다.
드라이버 조회와 시스템 변경 적용이 두 실행 단계로 분리됩니다.