Blame view

kernel/linux-imx6_3.14.28/scripts/package/builddeb 11.6 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
  #!/bin/sh
  #
  # builddeb 1.3
  # Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
  #
  # Simple script to generate a deb package for a Linux kernel. All the
  # complexity of what to do with a kernel after it is installed or removed
  # is left to other scripts and packages: they can install scripts in the
  # /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
  # specified in KDEB_HOOKDIR) that will be called on package install and
  # removal.
  
  set -e
  
  create_package() {
  	local pname="$1" pdir="$2"
  
  	cp debian/copyright "$pdir/usr/share/doc/$pname/"
  	cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
  	gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
  	sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
  		| xargs -r0 md5sum > DEBIAN/md5sums"
  
  	# Fix ownership and permissions
  	chown -R root:root "$pdir"
  	chmod -R go-w "$pdir"
  
  	# Attempt to find the correct Debian architecture
  	local forcearch="" debarch=""
  	case "$UTS_MACHINE" in
  	i386|ia64|alpha)
  		debarch="$UTS_MACHINE" ;;
  	x86_64)
  		debarch=amd64 ;;
  	sparc*)
  		debarch=sparc ;;
  	s390*)
  		debarch=s390 ;;
  	ppc*)
  		debarch=powerpc ;;
  	parisc*)
  		debarch=hppa ;;
  	mips*)
  		debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
  	arm*)
  		debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
  	*)
  		echo "" >&2
  		echo "** ** **  WARNING  ** ** **" >&2
  		echo "" >&2
  		echo "Your architecture doesn't have it's equivalent" >&2
  		echo "Debian userspace architecture defined!" >&2
  		echo "Falling back to using your current userspace instead!" >&2
  		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
  		echo "" >&2
  	esac
  	if [ -n "$KBUILD_DEBARCH" ] ; then
  		debarch="$KBUILD_DEBARCH"
  	fi
  	if [ -n "$debarch" ] ; then
  		forcearch="-DArchitecture=$debarch"
  	fi
  
  	# Create the package
  	dpkg-gencontrol -isp $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir"
  	dpkg --build "$pdir" ..
  }
  
  # Some variables and settings used throughout the script
  version=$KERNELRELEASE
  revision=$(cat .version)
  if [ -n "$KDEB_PKGVERSION" ]; then
  	packageversion=$KDEB_PKGVERSION
  else
  	packageversion=$version-$revision
  fi
  tmpdir="$objtree/debian/tmp"
  fwdir="$objtree/debian/fwtmp"
  kernel_headers_dir="$objtree/debian/hdrtmp"
  libc_headers_dir="$objtree/debian/headertmp"
  dbg_dir="$objtree/debian/dbgtmp"
  packagename=linux-image-$version
  fwpackagename=linux-firmware-image-$version
  kernel_headers_packagename=linux-headers-$version
  libc_headers_packagename=linux-libc-dev
  dbg_packagename=$packagename-dbg
  
  if [ "$ARCH" = "um" ] ; then
  	packagename=user-mode-linux-$version
  fi
  
  # Not all arches have the same installed path in debian
  # XXX: have each arch Makefile export a variable of the canonical image install
  # path instead
  case $ARCH in
  um)
  	installed_image_path="usr/bin/linux-$version"
  	;;
  parisc|mips|powerpc)
  	installed_image_path="boot/vmlinux-$version"
  	;;
  *)
  	installed_image_path="boot/vmlinuz-$version"
  esac
  
  BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
  
  # Setup the directory structure
  rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
  mkdir -m 755 -p "$tmpdir/DEBIAN"
  mkdir -p  "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
  mkdir -m 755 -p "$fwdir/DEBIAN"
  mkdir -p "$fwdir/lib/firmware/$version/" "$fwdir/usr/share/doc/$fwpackagename"
  mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
  mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
  mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
  mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
  mkdir -p "$kernel_headers_dir/lib/modules/$version/"
  if [ "$ARCH" = "um" ] ; then
  	mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
  fi
  if [ -n "$BUILD_DEBUG" ] ; then
  	mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
  	mkdir -m 755 -p "$dbg_dir/DEBIAN"
  fi
  
  # Build and install the kernel
  if [ "$ARCH" = "um" ] ; then
  	$MAKE linux
  	cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
  	cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
  	gzip "$tmpdir/usr/share/doc/$packagename/config"
  else 
  	cp System.map "$tmpdir/boot/System.map-$version"
  	cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
  fi
  # Not all arches include the boot path in KBUILD_IMAGE
  if [ -e $KBUILD_IMAGE ]; then
  	cp $KBUILD_IMAGE "$tmpdir/$installed_image_path"
  else
  	cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path"
  fi
  
  if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
  	INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
  	rm -f "$tmpdir/lib/modules/$version/build"
  	rm -f "$tmpdir/lib/modules/$version/source"
  	if [ "$ARCH" = "um" ] ; then
  		mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
  		rmdir "$tmpdir/lib/modules/$version"
  	fi
  	if [ -n "$BUILD_DEBUG" ] ; then
  		(
  			cd $tmpdir
  			for module in $(find lib/modules/ -name *.ko); do
  				mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
  				# only keep debug symbols in the debug file
  				$OBJCOPY --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
  				# strip original module from debug symbols
  				$OBJCOPY --strip-debug $module
  				# then add a link to those
  				$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
  			done
  		)
  	fi
  fi
  
  if [ "$ARCH" != "um" ]; then
  	$MAKE headers_check KBUILD_SRC=
  	$MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
  fi
  
  # Install the maintainer scripts
  # Note: hook scripts under /etc/kernel are also executed by official Debian
  # kernel packages, as well as kernel packages built using make-kpkg.
  # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
  # so do we; recent versions of dracut and initramfs-tools will obey this.
  debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
  if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then
  	want_initrd=Yes
  else
  	want_initrd=No
  fi
  for script in postinst postrm preinst prerm ; do
  	mkdir -p "$tmpdir$debhookdir/$script.d"
  	cat <<EOF > "$tmpdir/DEBIAN/$script"
  #!/bin/sh
  
  set -e
  
  # Pass maintainer script parameters to hook scripts
  export DEB_MAINT_PARAMS="\$*"
  
  # Tell initramfs builder whether it's wanted
  export INITRD=$want_initrd
  
  test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
  exit 0
  EOF
  	chmod 755 "$tmpdir/DEBIAN/$script"
  done
  
  # Try to determine maintainer and email values
  if [ -n "$DEBEMAIL" ]; then
         email=$DEBEMAIL
  elif [ -n "$EMAIL" ]; then
         email=$EMAIL
  else
         email=$(id -nu)@$(hostname -f)
  fi
  if [ -n "$DEBFULLNAME" ]; then
         name=$DEBFULLNAME
  elif [ -n "$NAME" ]; then
         name=$NAME
  else
         name="Anonymous"
  fi
  maintainer="$name <$email>"
  
  # Generate a simple changelog template
  cat <<EOF > debian/changelog
  linux-upstream ($packageversion) unstable; urgency=low
  
    * Custom built Linux kernel.
  
   -- $maintainer  $(date -R)
  EOF
  
  # Generate copyright file
  cat <<EOF > debian/copyright
  This is a packacked upstream version of the Linux kernel.
  
  The sources may be found at most Linux ftp sites, including:
  ftp://ftp.kernel.org/pub/linux/kernel
  
  Copyright: 1991 - 2009 Linus Torvalds and others.
  
  The git repository for mainline kernel development is at:
  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; version 2 dated June, 1991.
  
  On Debian GNU/Linux systems, the complete text of the GNU General Public
  License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
  EOF
  
  # Generate a control file
  cat <<EOF > debian/control
  Source: linux-upstream
  Section: kernel
  Priority: optional
  Maintainer: $maintainer
  Standards-Version: 3.8.4
  Homepage: http://www.kernel.org/
  EOF
  
  if [ "$ARCH" = "um" ]; then
  	cat <<EOF >> debian/control
  
  Package: $packagename
  Provides: linux-image, linux-image-2.6, linux-modules-$version
  Architecture: any
  Description: User Mode Linux kernel, version $version
   User-mode Linux is a port of the Linux kernel to its own system call
   interface.  It provides a kind of virtual machine, which runs Linux
   as a user process under another Linux kernel.  This is useful for
   kernel development, sandboxes, jails, experimentation, and
   many other things.
   .
   This package contains the Linux kernel, modules and corresponding other
   files, version: $version.
  EOF
  
  else
  	cat <<EOF >> debian/control
  
  Package: $packagename
  Provides: linux-image, linux-image-2.6, linux-modules-$version
  Suggests: $fwpackagename
  Architecture: any
  Description: Linux kernel, version $version
   This package contains the Linux kernel, modules and corresponding other
   files, version: $version.
  EOF
  
  fi
  
  # Build header package
  (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles")
  (cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles")
  (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
  destdir=$kernel_headers_dir/usr/src/linux-headers-$version
  mkdir -p "$destdir"
  (cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
  (cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
  (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
  ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
  rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
  
  cat <<EOF >> debian/control
  
  Package: $kernel_headers_packagename
  Provides: linux-headers, linux-headers-2.6
  Architecture: any
  Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
   This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch}
   .
   This is useful for people who need to build external modules
  EOF
  
  # Do we have firmware? Move it out of the way and build it into a package.
  if [ -e "$tmpdir/lib/firmware" ]; then
  	mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
  	rmdir "$tmpdir/lib/firmware"
  
  	cat <<EOF >> debian/control
  
  Package: $fwpackagename
  Architecture: all
  Description: Linux kernel firmware, version $version
   This package contains firmware from the Linux kernel, version $version.
  EOF
  
  	create_package "$fwpackagename" "$fwdir"
  fi
  
  cat <<EOF >> debian/control
  
  Package: $libc_headers_packagename
  Section: devel
  Provides: linux-kernel-headers
  Architecture: any
  Description: Linux support headers for userspace development
   This package provides userspaces headers from the Linux kernel.  These headers
   are used by the installed headers for GNU glibc and other system libraries.
  EOF
  
  if [ "$ARCH" != "um" ]; then
  	create_package "$kernel_headers_packagename" "$kernel_headers_dir"
  	create_package "$libc_headers_packagename" "$libc_headers_dir"
  fi
  
  create_package "$packagename" "$tmpdir"
  
  if [ -n "$BUILD_DEBUG" ] ; then
  	# Build debug package
  	# Different tools want the image in different locations
  	# perf
  	mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
  	cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
  	# systemtap
  	mkdir -p $dbg_dir/usr/lib/debug/boot/
  	ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
  	# kdump-tools
  	ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
  
  	cat <<EOF >> debian/control
  
  Package: $dbg_packagename
  Section: debug
  Provides: linux-debug, linux-debug-$version
  Architecture: any
  Description: Linux kernel debugging symbols for $version
   This package will come in handy if you need to debug the kernel. It provides
   all the necessary debug symbols for the kernel and its modules.
  EOF
  
  	create_package "$dbg_packagename" "$dbg_dir"
  fi
  
  exit 0