wok-tiny rev 178
linux: update cmdline.S
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Aug 13 19:51:00 2023 +0000 (8 months ago) |
parents | 07306c98c4d7 |
children | d5c772484b59 |
files | linux/receipt linux/stuff/bundle linux/stuff/cmdline.S |
line diff
1.1 --- a/linux/receipt Wed Aug 09 15:38:04 2023 +0000 1.2 +++ b/linux/receipt Sun Aug 13 19:51:00 2023 +0000 1.3 @@ -23,7 +23,7 @@ 1.4 S2bin() 1.5 { 1.6 [ -s $stuff/$1.S ] && 1.7 - cc -o $1.o -Wa,-algms=$1.lst -c $stuff/$1.S && 1.8 + cc $2 -o $1.o -Wa,-algms=$1.lst -c $stuff/$1.S && 1.9 objcopy -O binary $1.o $1.bin 1.10 } 1.11 1.12 @@ -33,6 +33,11 @@ 1.13 sed -i 's|CONFIG_INITRAMFS_SOURCE="|&root.cpio|' .config 1.14 } 1.15 1.16 +setup_code() 1.17 +{ 1.18 + echo $((514 + $(od -An -j 513 -N 1 -i $1))) 1.19 +} 1.20 + 1.21 # Rules to configure and make the package. 1.22 compile_rules() 1.23 { 1.24 @@ -63,6 +68,7 @@ 1.25 rootfs 1.26 yes '' | make ARCH=i386 HOSTCC=gcc config 1.27 make ARCH=i386 CC=gcc HOSTCC=gcc -j 4 bzImage 1.28 + cp arch/i386/boot/bzImage arch/i386/boot/bzImage.made.386 1.29 1.30 grep -q "CONFIG_MODULES=y" .config && 1.31 make ARCH=i386 CC=gcc HOSTCC=gcc -j 4 modules && 1.32 @@ -70,6 +76,7 @@ 1.33 S2bin bundle 1.34 cp $stuff/bundle . 1.35 sh ./bundle 1.36 + S2bin cmdline -DEDIT_CMDLINE ; mv cmdline.bin editcmdline.bin 1.37 S2bin cmdline 1.38 [ $(upx --version 2> /dev/null | sed '/upx/!d;s|upx ||;s|\.||;q')0 -ge 3960 ] && 1.39 upx --ultra-brute arch/i386/boot/bzImage 1.40 @@ -80,6 +87,7 @@ 1.41 rootfs 1.42 yes '' | make ARCH=i386 HOSTCC=gcc config 1.43 make ARCH=i386 CC=gcc HOSTCC=gcc -j 4 bzImage 1.44 + cp arch/i386/boot/bzImage arch/i386/boot/bzImage.made 1.45 which upx 2> /dev/null && upx --ultra-brute arch/i386/boot/bzImage 1.46 } 1.47 1.48 @@ -89,11 +97,12 @@ 1.49 mkdir $fs/boot 1.50 cp -a $src/pack $fs/boot/ 1.51 cp -a $src/bundle.sh $fs/boot/bundle 1.52 + cp -a $src/editcmdline.bin $fs/boot/cmdline.bin 1.53 for i in '' .386 ; do 1.54 [ -s $src/arch/i386/boot/bzImage$i ] || continue 1.55 cp -a $src/arch/i386/boot/bzImage$i $fs/boot/ 1.56 dd if=$src/bootloader.bin of=$fs/boot/bzImage$i conv=notrunc 1.57 - dd if=$src/cmdline.bin bs=1 seek=560 of=$fs/boot/bzImage$i conv=notrunc 1.58 + dd if=$src/cmdline.bin bs=1 seek=$(setup_code $fs/boot/bzImage$i) of=$fs/boot/bzImage$i conv=notrunc 1.59 cp -a $src/System.map$i $fs/boot/ 1.60 cp -a $src/.config$i $fs/boot/config$i 1.61 done 1.62 @@ -111,6 +120,8 @@ 1.63 <td><input type="radio" name="CPU586" $([ "$CPU586" != "no" ] && echo "checked=checked ")value="yes"> optimized for pentium or newer CPU</td> 1.64 </tr> 1.65 </table> 1.66 +<input type="checkbox" name="EDIT_CMDLINE" ${EDIT_CMDLINE:+ckecked="ckecked" }/> 1.67 +The user can edit the kernel cmdline at boot time. 1.68 EOT 1.69 } 1.70 1.71 @@ -120,6 +131,8 @@ 1.72 for i in $1/boot/*.386 ; do 1.73 [ "$CPU586" = "yes" ] && rm -f $i || mv -f $i ${i%.386} 1.74 done 2> /dev/null 1.75 + [ "$EDIT_CMDLINE" ] && 1.76 + dd if=$1/boot/cmdline.bin bs=1 seek=$(setup_code $1/boot/bzImage) of=$1/boot/bzImage conv=notrunc 1.77 [ -s $1/boot/cmdline ] && cat $1/boot/cmdline | sed 's/^ *//' | \ 1.78 dd of=$1/boot/bzImage conv=notrunc bs=1 seek=768 count=3072 1.79 $1/boot/pack $1/boot/bzImage
2.1 --- a/linux/stuff/bundle Wed Aug 09 15:38:04 2023 +0000 2.2 +++ b/linux/stuff/bundle Sun Aug 13 19:51:00 2023 +0000 2.3 @@ -121,6 +121,8 @@ 2.4 ls -l "$name" | cut -c35- 2.5 done 2.6 else 2.7 + cmdline="$(dd if=bzimage bs=1 skip=768 count=3072 2> /dev/null | strings)" 2.8 + [ "$cmdline" ] && echo "cmdline: $cmdline" 2.9 base_initrd=$(get 0x218 "$1") 2.10 size_initrd=$(get 0x21C "$1") 2.11 [ $base_initrd -ne 0 ] &&
3.1 --- a/linux/stuff/cmdline.S Wed Aug 09 15:38:04 2023 +0000 3.2 +++ b/linux/stuff/cmdline.S Sun Aug 13 19:51:00 2023 +0000 3.3 @@ -1,51 +1,76 @@ 3.4 -start_of_setup = 0xF00 3.5 -cmd_line_ptr = 0x228 3.6 -default_cmdline = 0x300 3.7 -#define ABS(x) (x)-0x230 3.8 -#ifdef BUGGY 3.9 -#define EDIT_CMDLINE 3.10 -#endif 3.11 + 3.12 +# Linux 2.6.20: 0238 call 0F00 // E8 C5 0C 90 8D B4 00 ... 3.13 + 3.14 +start_of_setup = (0xF00-0x200) 3.15 +cmd_line_ptr = (0x228-0x200) 3.16 +default_cmdline = (0x300-0x200) 3.17 +buffer_cmdline = (0x8000-0x200) 3.18 +max_cmdline = 3072 3.19 +//#define MISTER_PROPER 3.20 +#define DELAY 5 3.21 3.22 .code16 3.23 .org 0 3.24 - //.org 0x230 3.25 tranpoline: 3.26 call start_of_setup2 3.27 -base = 3 3.28 - rep 3.29 - stosb 3.30 - popw %ds 3.31 - ret 3.32 +#ifdef MISTER_PROPER 3.33 + .byte 0x90, 0x8D, 0xB4 3.34 +#endif 3.35 3.36 start_of_setup2: 3.37 - popw %di // caller nextip = base 3.38 + pushw $start_of_setup 3.39 +#ifdef MISTER_PROPER 3.40 + pushal 3.41 + pushw %es 3.42 + pushw %ds // caller %ds 3.43 +#endif 3.44 + cld 3.45 + movw $default_cmdline, %di 3.46 pushw %di 3.47 - pushw %ds // caller %ds 3.48 + movl $0x98000, %eax // cmdline 9000:8000 3.49 + movw $max_cmdline, %cx 3.50 + pushw %cs 3.51 + popw %es // %es:di = default_cmdline 3.52 + repne scasb // seek default_cmdline end 3.53 + xchgl %cs:cmd_line_ptr, %eax // update ptr 3.54 + orl %eax, %eax 3.55 + jz no_cmdline // nothing to concatenate 3.56 + movb $' ', %es:-1(%di) 3.57 + xchgw %ax, %si 3.58 + xorw %ax, %ax // long ptr to 3.59 + shrl $4, %eax // %ds:%si 3.60 + movw %ax, %ds 3.61 +append: 3.62 + cmpb (%si), %al 3.63 + movsb 3.64 + loopne append 3.65 + stosb // ensure EOS exist 3.66 +no_cmdline: 3.67 + movw %di, %cx 3.68 + popw %si 3.69 + subw %si, %cx 3.70 pushw %cs 3.71 popw %ds 3.72 - xorl %eax, %eax 3.73 - leaw ABS(default_cmdline)-base(%di), %si 3.74 - cmpb %al, (%si) 3.75 - je no_cmdline 3.76 - orl ABS(cmd_line_ptr)-base(%di), %eax 3.77 - jne not_default 3.78 - cld 3.79 + movw $buffer_cmdline, %di 3.80 +#ifdef EDIT_CMDLINE 3.81 + pushw %di 3.82 +#endif 3.83 + rep movsb 3.84 + 3.85 +#ifdef EDIT_CMDLINE 3.86 + popw %si 3.87 3.88 -#ifdef EDIT_CMDLINE 3.89 # The cmdline can be entered and modifed at boot time. 3.90 # Only characters before the cursor are passed to the kernel. 3.91 3.92 - movw %ax, %es 3.93 movw %si, %dx 3.94 movb $13, %al 3.95 puts: 3.96 -#ifdef BUGGY 3.97 call putc 3.98 -#endif 3.99 lodsb 3.100 orb %al, %al 3.101 jnz puts 3.102 -endputs: 3.103 + movw %bx, %es 3.104 cmdlp: 3.105 movb $0x20, %al # clear end of line 3.106 cmdlpz: 3.107 @@ -54,9 +79,8 @@ 3.108 jnc cmdlpz 3.109 decw %si 3.110 cmdget: 3.111 -clock = 0x46C 3.112 +clock = 0x46C-0x70 3.113 movw $clock, %bx 3.114 -#define DELAY 5 3.115 movb $257-(DELAY*182)/10, %es:(%bx) 3.116 waitkbd: 3.117 movw $0x10D, %ax # test keyboard, timeout => CR 3.118 @@ -76,52 +100,29 @@ 3.119 cmpw %dx, %si 3.120 je cmdget 3.121 call putc 3.122 - cmpb $10, %al # Enter/linefeed ? 3.123 + subb $10, %al # Enter/linefeed ? 3.124 jne cmdlp 3.125 movb %bh,-2(%si) # set end of string and remove CR 3.126 -endcmdline: 3.127 - movw %dx, %si 3.128 #endif 3.129 - 3.130 - xorw %cx, %cx 3.131 -len: 3.132 - lodsb 3.133 - orb %al, %al 3.134 - loopne len 3.135 - addw %cx, %si 3.136 - cbw 3.137 - cdq 3.138 - andb $0xFE, %cl 3.139 - popw %bp // caller %ds 3.140 - addw %cx, %sp 3.141 - pushw %di // caller nextip 3.142 - pushw %bp // caller %ds 3.143 - pushw %ss 3.144 - popw %es 3.145 - movw %sp, %ax 3.146 - movw %es, %dx 3.147 - shll $4, %edx 3.148 - addl %eax, %edx 3.149 - movl %edx, ABS(cmd_line_ptr)-base(%di) 3.150 - pushw %di 3.151 - xchgw %ax, %di 3.152 - negw %cx 3.153 - rep 3.154 - movsb 3.155 - popw %di 3.156 -not_default: 3.157 -no_cmdline: 3.158 +#ifdef MISTER_PROPER 3.159 + popw %ds 3.160 +# if 0 3.161 + movw %sp, %bp 3.162 + movw 32+2(%bp),%di 3.163 + addw $3, %di 3.164 pushw %cs 3.165 popw %es 3.166 - movw $ABS(start_of_setup)-base, %cx 3.167 - leaw ABS(start_of_setup)-base(%di), %ax 3.168 - pushw %ax 3.169 - xorw %ax, %ax 3.170 - jmp *%di 3.171 + movw $.end-start_of_setup2, %cx 3.172 + rep stosb 3.173 +# endif 3.174 + popw %es 3.175 + popal 3.176 +#endif 3.177 + ret 3.178 3.179 #ifdef EDIT_CMDLINE 3.180 putlf: 3.181 - xorb $10^13, %al 3.182 + movb $10, %al 3.183 putc: 3.184 movb $0xe, %ah 3.185 movw $7, %bx 3.186 @@ -130,4 +131,4 @@ 3.187 je putlf 3.188 ret 3.189 #endif 3.190 - 3.191 +.end: