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: