{"id":332,"date":"2005-01-20T20:14:10","date_gmt":"2005-01-20T18:14:10","guid":{"rendered":"http:\/\/www.marblestation.com\/blog\/?p=332"},"modified":"2012-04-26T18:25:11","modified_gmt":"2012-04-26T16:25:11","slug":"compilar-kernel-en-ubuntu-con-soporte-smarte-batteries-y-software-suspend-2","status":"publish","type":"post","link":"https:\/\/www.marblestation.com\/?p=332","title":{"rendered":"Compilar kernel en Ubuntu con soporte Smart Battery y Software Suspend 2"},"content":{"rendered":"<p>He pasado unas cuantas horas trasteando con el kernel en Ubuntu, queria activar un par de cosas:<\/p>\n<ul>\n<li>Soporte para Smart Battery: como ya he comentado en <a href=\"http:\/\/www.marblestation.com\/blog\/index.php?p=316\">otras ocasiones<\/a>, el soporte para smart batteries (la que tiene mi port\u00e1til) se esta desarrollando en estos momentos pero ya existen parches usables. Me molesta no poder saber el estado de la bateria y queria esta funcionalidad ya.<\/li>\n<li>Posibilidad de suspender o hibernar el equipo, es decir, a memoria RAM o a SWAP. La mejor alternativa que he encontrado es <a href=\"http:\/\/softwaresuspend.berlios.de\/\">Software Suspend 2<\/a> que te permite hibernar el equipo (guardando el estado en la SWAP) y recuperarlo tal y como lo dejaste al encenderlo de nuevo.\n<\/li>\n<\/ul>\n<p>Lo primero ha sido descargarse las fuentes del kernel, queria utilizar el \u00faltimo disponible y aplicar los parches de Ubuntu para que me funcione lo m\u00e1ximo posible con la distribuci\u00f3n (mantener la modularidad y tal para la autodetecci\u00f3n de hardware). He a\u00f1adido al fichero \/etc\/apt\/sources.list:<br \/>\n<!--more--><\/p>\n<pre>:\/\/archive.ubuntu.com\/ubuntu hoary main restricted universe multiverse\r\ndeb-src http:\/\/archive.ubuntu.com\/ubuntu hoary main restricted universe multiverse\r\n<\/pre>\n<p>He actualizado el listado de aplicaciones y me he descargado el c\u00f3digo fuente del \u00faltimo n\u00facleo:<\/p>\n<pre>\r\naptitude update\r\napt-get source linux-image-2.6.10-3-686\r\n<\/pre>\n<p>Esto me ha creado diversos ficheros:<\/p>\n<pre>\r\n$ ls\r\nlinux-source-2.6.10-2.6.10\/\r\nlinux-source-2.6.10_2.6.10-10.dsc\r\nlinux-source-2.6.10_2.6.10-10.diff.gz\r\nlinux-source-2.6.10_2.6.10.orig.tar.gz\r\n<\/pre>\n<p><i>* En este punto podemos deshacer ya los cambios del \/etc\/apt\/sources.lists y volver a ejecutar &#8216;aptitude update&#8217;<\/i><\/p>\n<p>A continuaci\u00f3n he descomprimido el c\u00f3digo fuente original del n\u00facleo:<\/p>\n<pre>\r\n# cd \/usr\/src\r\n# tar -zxvf \/home\/user\/Downloads\/linux-source-2.6.10_2.6.10.orig.tar.gz\r\n# ln -s linux-source-2.6.10-2.6.10 linux\r\n<\/pre>\n<p>Ahora llega el momento de aplicar los parches necesarios para las smart batteries y el software suspend 2, los descargamos y seguimos las instrucciones.<\/p>\n<ol>\n<li>Descarga del soporte Smart Battery: <a href=\"http:\/\/shayol.bartol.udel.edu\/~rhdt\/download\/acpi_sbs-20050120.tar.gz\">acpi_sbs-20050120.tar.gz<\/a>. <\/li>\n<li>Descomprimimos y aplicamos parche:\n<pre>\r\n# tar -zxvf acpi_sbs-20050120.tar.gz\r\n# cd \/usr\/src\/linux\r\npatch -p1 &#60;  \/home\/user\/Downloads\/acpi_sbs-20050119\/acpi-ec-2.6.10.diff\r\n<\/pre>\n<\/li>\n<li> href=&#8221;http:\/\/developer.berlios.de\/project\/showfiles.php?group_id=1412&#8243;>Software Suspend 2 y del script hibernate:\n<pre>\r\n# tar -zxvf hibernate-script-1.03.tar.gz\r\n# cd hibernate-script-1.03\/\r\n# checkinstall .\/install.sh\r\n# cd ..\r\n# tar -zxvf software-suspend-2.1.5.14-for-2.6.10.tar.bz2\r\n# cd \/usr\/src\/linux\r\n\/home\/user\/Downloads\/software-suspend-2.1.5.14-for-2.6.10\/apply\r\n<\/pre>\n<\/li>\n<\/ol>\n<p>A continuaci\u00f3n instal\u00e9 dpatch para poder aplicar comodamente los parches de Ubuntu:<\/p>\n<pre>\r\n# aptitude install dpatch\r\n# cd \/usr\/src\/linux\r\n# cp -r \/home\/user\/Downloads\/linux-source-2.6.10-2.6.10\/debian\/ .\r\n<\/pre>\n<p>Como vamos a aplicar parches sobre un kernel no original, algunos fallaran. Para que no haya problemas de compilaci\u00f3n, he aplicado solo aquellos que no fallaban:<\/p>\n<pre>\r\ndpatch apply stolen-from-head_acpi-20041210\r\ndpatch apply stolen-from-head_fix-cx88-build\r\ndpatch apply stolen-from-head_fix_cap_mod\r\ndpatch apply stolen-from-head_fix-gconfig\r\ndpatch apply stolen-from-head_brk-locked\r\ndpatch apply stolen-from-head_microcode-less-confusing\r\ndpatch apply stolen-from-head_quite-scsi-ioctl\r\ndpatch apply stolen-from-head_early-ali-watchdog-support\r\ndpatch apply stolen-from-head_fix-ibmvscsi-timeout\r\ndpatch apply stolen-from-head_ibm-acpi-exit\r\ndpatch apply stolen-from-head_libata-pio-1\r\ndpatch apply stolen-from-head_libata-pio-2\r\ndpatch apply stolen-from-head_libata-dma-1\r\ndpatch apply stolen-from-head_libata-fixftbs\r\ndpatch apply stolen-from-head_sparc64-stop-referencing-isock\r\ndpatch apply stolen-from-head_prefetching-skb-queue-walk\r\ndpatch apply stolen-from-head_dsmark-ignore-ecn\r\ndpatch apply stolen-from-head_serverworks-CSB6-raid-support\r\ndpatch apply stolen-from-head_zatm-fix\r\ndpatch apply stolen-from-head_mxser-several-fixes\r\ndpatch apply stolen-from-head_cinergy-user-annotation\r\ndpatch apply stolen-from-head_av7110_hw-user-annotation\r\ndpatch apply stolen-from-head_fix-redundant-ide-proc-entry\r\ndpatch apply stolen-from-head_fix-ide-cleanup-module\r\ndpatch apply stolen-from-head_uaccess-annotation\r\ndpatch apply stolen-from-head_intel-ich7-support\r\ndpatch apply stolen-from-head_fix-build-with-no-ipv6\r\ndpatch apply stolen-from-head_fix-fake-anti-optimizer-macro\r\ndpatch apply stolen-from-head_send_sigtrap\r\ndpatch apply stolen-from-head_tf-handling\r\ndpatch apply stolen-from-head_single-step-popf\r\ndpatch apply stolen-from-head_ipt_ECN-corrupt-checksum-fix\r\ndpatch apply stolen-from-head_fix-inet6_sk\r\ndpatch apply stolen-from-head_fix-proc-ip_conntrack_standalone\r\ndpatch apply stolen-from-head_fix-cleanup-path\r\ndpatch apply stolen-from-head_uaccess-annotation-ppc\r\n#dpatch apply stolen-from-head_acpi-video-device-enumeration\r\ndpatch apply stolen-from-head_fix-PT_DTRACE-test\r\ndpatch apply stolen-from-head_fix-single-step-x86\r\ndpatch apply stolen-from-head_more-rockwell-pnp-modems\r\ndpatch apply stolen-from-head_vmscan-total_scanned-fix\r\ndpatch apply stolen-from-head_CS461x-gameport-build-for-real\r\ndpatch apply stolen-from-head_mm-keep-count-of-free-areas\r\ndpatch apply stolen-from-head_simplified-readahead\r\ndpatch apply stolen-from-head_simplified-readahead-congestion-control\r\ndpatch apply stolen-from-head_mempolicy-optimisation\r\ndpatch apply stolen-from-head_mm-overcommit-updates\r\ndpatch apply stolen-from-head_mark_page_accessed\r\ndpatch apply stolen-from-head_do_anonymous_page\r\ndpatch apply stolen-from-head_do-not-collect-page_states\r\ndpatch apply stolen-from-head_fix-ipt_recent-checkentry\r\ndpatch apply stolen-from-head_fix-ip_conntrack_proto_sctp-exit\r\ndpatch apply stolen-from-head_fix-ip_ct_selective_cleanup\r\ndpatch apply stolen-from-head_ipchains_and_ipfwadm_must_die\r\ndpatch apply stolen-from-head_remove-copy-to-user-warnings\r\ndpatch apply stolen-from-head_ipt_recent-should-ipt_registrater_match\r\ndpatch apply stolen-from-head_fix-broken-rst-handling-in-ip_conntrack\r\ndpatch apply stolen-from-head_fix-ide-arch-obsolete-init\r\ndpatch apply stolen-from-head_assign-pkmap-base-dinamically\r\ndpatch apply stolen-from-head_fix-data-code-overlap\r\ndpatch apply stolen-from-head_cyrix-mii-cpuid\r\ndpatch apply stolen-from-head_triple-fault-with-4k-mapping-and-pae\r\n#dpatch apply stolen-from-head_bootloader-type\r\ndpatch apply stolen-from-head_amd64-thermal-monitor\r\ndpatch apply stolen-from-head_amd64-k8-cmp-fix\r\ndpatch apply stolen-from-head_amd64-numa-add-cpu-fix\r\ndpatch apply stolen-from-head_amd64-remove-duplicate-macro\r\ndpatch apply stolen-from-head_amd64-no-vsyscalls-debug\r\ndpatch apply stolen-from-head_amd64-rename-HTVALID2CMP_LEGACY\r\ndpatch apply stolen-from-head_amd64-cmp-add-scheduler-support\r\ndpatch apply stolen-from-head_amd64-add-missing-iomem\r\ndpatch apply stolen-from-head_amd64-missing-newline\r\ndpatch apply stolen-from-head_amd64-print-segfaults\r\ndpatch apply stolen-from-head_amd64-export-phys-proc-id\r\ndpatch apply stolen-from-head_swsusp-handle-errors\r\n#dpatch apply stolen-from-head_kill-On2-in-swsusp\r\ndpatch apply stolen-from-head_fix-noexec-param\r\ndpatch apply stolen-from-head_ipt_REJECT\r\ndpatch apply stolen-from-head_ipt_ECN-needs-tcp\r\ndpatch apply stolen-from-head_fix-capset-wrong-returns\r\n#dpatch apply stolen-from-head_s3-time-too-fast\r\ndpatch apply stolen-from-head_ptracer-death-race\r\ndpatch apply stolen-from-head_modular-megaraid\r\ndpatch apply stolen-from-head_parport_pc_module_parm_mixing\r\ndpatch apply stolen-from-head_alsa-emu10k1-ioctl-fix\r\ndpatch apply stolen-from-head_nfs-client-odirect\r\ndpatch apply stolen-from-head_8390-skb_padto\r\ndpatch apply stolen-from-head_nfs-df-result\r\ndpatch apply stolen-from-head_fix-udf-race\r\ndpatch apply stolen-from-head_turn-on-CRD-8480C-dma\r\ndpatch apply stolen-from-head_ide-wrong-buffer\r\ndpatch apply stolen-from-head_intel-ich7-sata\r\ndpatch apply stolen-from-head_ich3m-quirks\r\ndpatch apply stolen-from-head_fix-cdrom-autoclose\r\ndpatch apply stolen-from-head_overflow-in-nls\r\ndpatch apply stolen-from-head_fix-rlimit-memlock-dos\r\ndpatch apply stolen-from-head_fix-smp-race-condition\r\ndpatch apply stolen-from-head_verify_mm_writelocked\r\ndpatch apply stolen-from-head_acct_stack_growth_nitpicks\r\ndpatch apply stolen-from-head_ehci-dies-on-startup\r\ndpatch apply stolen-from-head_vesafb_failure_probing\r\ndpatch apply 029-random_poolsize_overflow\r\ndpatch apply 030-moxa_user_copy_checking\r\ndpatch apply 031-sg_scsi_ioctl_int_overflows\r\ndpatch apply untrusted-user-data\r\ndpatch apply amd64-memset\r\ndpatch apply ia64-fix-ftbfs\r\ndpatch apply powerpc-fix-ftbfs\r\ndpatch apply doc-post_halloween\r\ndpatch apply drivers-ide-dma-blacklist-toshiba\r\ndpatch apply drivers-input-psaux-hacks\r\ndpatch apply drivers-net-8139too-locking\r\ndpatch apply drivers-scsi_changer\r\ndpatch apply drivers-scsi-generic_proc_info\r\ndpatch apply fs-asfs\r\ndpatch apply ipsec-missing_wakeup\r\ndpatch apply modular-ide\r\ndpatch apply modular-ide-pnp\r\ndpatch apply modular-vesafb\r\ndpatch apply remove-references-to-removed-drivers\r\ndpatch apply powerpc-pegasos\r\ndpatch apply powerpc-g4-l2-flush-errata\r\ndpatch apply ia64-generic-no-smp\r\ndpatch apply ia64-generic-no-smp-1-to-2\r\ndpatch apply evms-bd-claim\r\ndpatch apply mppe\r\n#dpatch apply ieee80211\r\n#dpatch apply ipw2100\r\n#dpatch apply ipw2200\r\n#dpatch apply ipw2100-fsam7400\r\n#dpatch apply ipw2100-fix-suspend-resume\r\n#dpatch apply ipw2200-fix-suspend-resume\r\n#dpatch apply wlan-ng-prism2-usb\r\ndpatch apply powerpc-serial\r\ndpatch apply powerpc-via82cxxx\r\n#dpatch apply acx100-2\r\n#dpatch apply acx100-kill-float-2\r\n#dpatch apply adm8211\r\ndpatch apply ndiswrapper1.0\r\ndpatch apply eagle-usb\r\n#dpatch apply acx100-fw-3\r\ndpatch apply powermac73\r\ndpatch apply acpi-psparse-aml-crash\r\ndpatch apply sparc-sunzilog-timeout\r\ndpatch apply sparc32-initrd-memcpy\r\ndpatch apply sparc64-hme-lockup\r\ndpatch apply tty-locking-fixes9\r\ndpatch apply smbfs-overflow-fixes-2\r\ndpatch apply inotify-0.17-rml-2.6.10-2\r\ndpatch apply sparc64-inotify-0.17-rml-2.6.10-2\r\ndpatch apply drm-fixes\r\ndpatch apply sk98lin-update-2\r\ndpatch apply synaptics-cpad-support\r\n#dpatch apply acx100-ia64\r\n#dpatch apply ia64-prism2\r\ndpatch apply dsdt-initrd\r\ndpatch apply swsusp-userspace\r\ndpatch apply wakeup_gdt\r\ndpatch apply drivers-usb-pwc\r\ndpatch apply marvell-pegasos-2\r\ndpatch apply cloop\r\ndpatch apply resume-finish-split\r\ndpatch apply panasonic_acpi\r\ndpatch apply sony_acpi\r\ndpatch apply tosh_acpi\r\ndpatch apply fix-ax25\r\ndpatch apply misrouted-irq\r\ndpatch apply b44\r\ndpatch apply ibm_acpi\r\ndpatch apply route-irq-again\r\ndpatch apply alsa-order-cards\r\ndpatch apply thaw_processes\r\n<\/pre>\n<p>A continuaci\u00f3n hay que configurar el kernel, como configuraci\u00f3n base podemos coger la del kernel de Warty (\/boot\/config-2.6.8.1-4-386) o la de Hoary (\/home\/user\/Downloads\/linux-source-2.6.10-2.6.10\/debian\/config\/i386\/686) y siempre viene bien darse un paseo por el menu de configuraci\u00f3n del n\u00facleo por si queremos activar algo m\u00e1s (en mi caso active el soporte PCMCIA, concretamente Yenta Socket&#8230; no se pq motivo estaba desactivado).<\/p>\n<pre>\r\n# cp \/boot\/config-2.6.8.1-4-386 \/usr\/src\/linux\/.config\r\n# cd \/usr\/src\/linux\r\n# make menuconfig\r\n<\/pre>\n<p>La configuraci\u00f3n necesaria para que funcione Smart Battery y Swsusp2 es la siguiente:<\/p>\n<pre>\r\n# vi \/usr\/src\/linux\/.config\r\n...\r\nCONFIG_ACPI=y\r\nCONFIG_ACPI_BOOT=y\r\nCONFIG_ACPI_INTERPRETER=y\r\nCONFIG_ACPI_SLEEP=y\r\nCONFIG_ACPI_SLEEP_PROC_FS=y\r\n# CONFIG_ACPI_AC is not set\r\n# CONFIG_ACPI_BATTERY is not set\r\nCONFIG_ACPI_BUTTON=m\r\n...\r\n#\r\n# Software Suspend 2\r\n#\r\nCONFIG_SOFTWARE_SUSPEND2=m\r\nCONFIG_SOFTWARE_SUSPEND2_BUILTIN=y\r\nCONFIG_SOFTWARE_SUSPEND_SWAPWRITER=m\r\n\r\n#\r\n# Page Transformers\r\n#\r\nCONFIG_SOFTWARE_SUSPEND_LZF_COMPRESSION=m\r\n\r\n#\r\n# User Interface Options\r\n#\r\nCONFIG_SOFTWARE_SUSPEND_TEXT_MODE=m\r\n...\r\n<\/pre>\n<p>Ahora ha llegado el momento de compilar el n\u00facleo:<\/p>\n<pre>\r\n# cd \/usr\/src\/linux\/\r\n# make bzImage modules modules_install\r\n# cp arch\/i386\/boot\/bzImage \/boot\/vmlinuz-2.6.10-686\r\n<\/pre>\n<p>A continuaci\u00f3n tenemos que crear el initrd, como vamos a utilizar swsusp2 tenemos que crear un nuevo fichero <a href=\"http:\/\/softwaresuspend.berlios.de\/wiki\/DebianInitrd\">\/etc\/mkinitrd\/scripts\/swsusp2<\/a>:<\/p>\n<pre>\r\n#!\/bin\/sh\r\n\r\n# Put this script in \/etc\/mkinitrd\/scripts\/ and regenerate your initrd (by\r\n# \"mkinitrd -o \/boot\/initrd.img-`uname -r`\" or reinstall your kernel package.\r\n\r\n# Copy in modules\r\n# Note: if you want to add gzip to the list, you'll need zlib_deflate too.\r\n\r\nMODULES=\"suspend_core suspend_block_io suspend_text suspend_swap lzf suspend_lzf\"\r\n\r\npushd $MODULEDIR > \/dev\/null 2>&1\r\nfor i in $MODULES ; do\r\n    find -name \"$i.ko\"\r\ndone | cpio -p --make-directories --quiet $INITRDDIR\/lib\/modules\/$VERSION\/\r\npopd > \/dev\/null 2>&1\r\n\r\n# Figure out swap device from the first device listed in \/proc\/swaps\r\nswap_device=`awk 'BEGIN{getline;getline;print$1}' &#60; \/proc\/swaps`\r\nswap_type=`awk 'BEGIN{getline;getline;print$2}' &#60; \/proc\/swaps`\r\n\r\nif [ \"x$swap_type\" = \"xpartition\" ] ; then\r\n    resume2=`perl -e \"@a=stat '$swap_device';printf 'swap:%04x', $a[6]\"`\r\nelse\r\n    echo \"Unable to determine swap device! You will need to set resume2= on your\"\r\n    echo \"kernel command-line manually.\"\r\nfi\r\n\r\n[ -n \"$resume2\" ] && resume2=\"echo $resume2 > \/proc\/software_suspend\/resume2\"\r\n\r\n# Modify linuxrc script\r\n\r\nmv $INITRDDIR\/linuxrc $INITRDDIR\/linuxrc.real\r\ncat &#60;&#60;EOT > $INITRDDIR\/linuxrc\r\n#!\/bin\/sh\r\n\r\nexport PATH=\/sbin:\/bin\r\n\r\nmount -t proc proc \/proc\r\n. \/loadmodules\r\nmodprobe suspend_core\r\nmodprobe suspend_block_io\r\nmodprobe suspend_text\r\nmodprobe lzf\r\nmodprobe suspend_lzf\r\nmodprobe suspend_swap\r\n$resume2\r\necho > \/proc\/software_suspend\/do_resume\r\n\r\n\r\nrmmod suspend_swap suspend_lzf lzf suspend_text suspend_block_io suspend_core\r\numount \/proc\r\n. .\/linuxrc.real\r\nEOT\r\n\r\nchmod 777 $INITRDDIR\/linuxrc\r\n<\/pre>\n<p>Y ahora generamos el initrd:<\/p>\n<pre>\r\nmkinitrd -o \/boot\/initrd.img-2.6.10-686 2.6.10\r\n<\/pre>\n<p>En el fichero de configuraci\u00f3n del grub (\/boot\/grub\/menu.lst) tendremos que indicar donde se encuentra nuestra partici\u00f3n swap, la cual usar\u00e1 swsusp2 para guardar la informaci\u00f3n cuando hibernemos:<\/p>\n<pre>\r\n...\r\n## ## Start Default Options ##\r\n## default kernel options\r\n## default kernel options for automagic boot options\r\n## If you want special options for specifiv kernels use kopt_x_y_z\r\n## where x.y.z is kernel version. Minor versions can be omitted.\r\n## e.g. kopt=root=\/dev\/hda1 ro\r\n# kopt=root=\/dev\/hda6 ro resume2=swap:\/dev\/hda5\r\n...\r\n<\/pre>\n<p>Y a continuaci\u00f3n actualizamos las entradas del grub:<\/p>\n<pre>\r\n# update-grub\r\n<\/pre>\n<p>Si todo ha ido bien, ya tenemos el kernel compilado y listo para reiniciar nuestro PC.<\/p>\n<p>En el primer inicio con el nuevo kernel tendremos que compilar los m\u00f3dulos de los drivers de Smart Battery:<\/p>\n<pre>\r\n# cd \/home\/user\/Downloads\/acpi_sbs-20050119\r\n# make\r\n# make install\r\n<\/pre>\n<p>Si tenemos un Pentium Centrino, es posible que nos interese instalar tambi\u00e9n el <a href=\"http:\/\/ipw2200.sourceforge.net\/\">driver para la tarjeta wireless<\/a>. Se descarga el codigo fuente:<\/p>\n<pre>\r\n# tar -zxvf ipw2200-0.21.tgz\r\n# cd ipw2200-0.21\/\r\n# vi ipw2200.c\r\n* Cambiamos la linea 6607  por \"priv->workqueue = create_workqueue(DRV_NAME, 0);\"\r\n# make\r\n# make install\r\n<\/pre>\n<p>Tambi\u00e9n ser\u00e1 necesario descargar el <a href=\"http:\/\/ipw2200.sourceforge.net\/firmware.php\">firmware<\/a> y descomprimirlo en \/usr\/lib\/hotplug\/firmware\/.<\/p>\n<p>Ya solo faltan los \u00faltimos retoques al sistema para que todo funcione correctamente, primero a\u00f1adiremos los modulos de smart battery para que se carguen automaticamente en \/etc\/modules:<\/p>\n<pre>\r\ni2c-acpi-ec\r\nacpi-sbs\r\ncapability\r\n<\/pre>\n<p><i>* El capability se ha de poner tanto si se va a usar Smart Battery como si no.<\/i><\/p>\n<p>Mi tarjeta de sonido no funciona correctamente con este kernel y curiosamente para que funcione solo tengo que ejecutar:<\/p>\n<pre>\r\nalsactl power 0 D3\r\nalsactl power 0 D0\r\n<\/pre>\n<p>Podemos poner esos comandos en un script de inicio, por ejemplo creamos \/etc\/init.d\/local:<\/p>\n<pre>\r\n#!\/bin\/sh\r\n# Init script\r\n\r\n\r\n. \/lib\/lsb\/init-functions\r\n\r\ncase \"$1\" in\r\nstart)  log_begin_msg \"Starting local init script...\"\r\n        #start-stop-daemon --start --quiet --exec\r\n        cp -f \/etc\/hosts.lan \/etc\/hosts\r\n        \/usr\/local\/sbin\/firewall\r\n        # Necesario para que funcione el sonido\r\n        # (Parece BUG al tener el kernel compilado con swsusp2)\r\n\r\n        alsactl power 0 D3\r\n        alsactl power 0 D0\r\n        #log_end_msg $?\r\n    ;;\r\n*)  log_success_msg \"Usage: \/etc\/init.d\/local start\"\r\n        exit 1\r\n        ;;\r\nesac\r\nexit 0\r\n<\/pre>\n<p>Ahora ya podemos volver a reiniciar y comprobar que todo funcione correctamente. Podemos ver el estado de la bater\u00eda con el comando &#8220;acpi&#8221; o con el applet de gnome correspondiente a la bater\u00eda.<\/p>\n<p>Para hibernar el equipo tendremos que configurar \/etc\/hibernate\/hibernate.conf, a continuaci\u00f3n listo las opciones principales:<\/p>\n<pre>\r\n### swsusp2_15 (for Software Suspend 2)\r\nUseSwsusp2 yes\r\nReboot no\r\nEnableEscape yes\r\nDefaultConsoleLevel 1\r\n# ImageSizeLimit 200\r\n## useful for initrd usage:\r\nSuspendDevice swap:\/dev\/hda5\r\nLoadSuspendModules suspend_swap suspend_lzf suspend_text\r\nUnloadSuspendModulesAfterResume yes\r\n\r\n##############################################################################\r\n### Some global settings\r\n##############################################################################\r\n\r\nVerbosity 0\r\nLogFile \/var\/log\/hibernate.log\r\nLogVerbosity 1\r\n\r\n\r\n### clock\r\nSaveClock yes\r\n\r\n### filesystems\r\n# Unmount \/nfsshare \/windows \/mnt\/sambaserver\r\nUnmountFSTypes smbfs nfs\r\n# UnmountGraceTime 1\r\n# Mount \/windows\r\n\r\n### lock (generally you only want one of the following options)\r\n# LockConsoleAs root\r\nLockXScreenSaver yes\r\n# LockKDE yes\r\n\r\n### modules\r\n# UnloadModules snd_via82cxxx usb-ohci\r\n# UnloadAllModules yes\r\nUnloadBlacklistedModules yes\r\nLoadModules auto\r\n# LoadModulesFromFile \/etc\/modules\r\n\r\n### network\r\n# DownInterfaces eth0\r\nDownInterfaces eth0\r\nDownInterfaces eth1\r\n# UpInterfaces auto\r\n\r\n### programs\r\n# IncompatiblePrograms xmms\r\nIncompatiblePrograms gqmpeg mplayer totem xine xmms rhythmbox\r\n<\/pre>\n<p>Para hibernar simplemente ejecutaremos como root &#8220;hibernate&#8221;, por ejemplo desde una terminal X. El PC se apagar\u00e1 y en el proximo reinicio se recuperar\u00e1 su estado tal y como se qued\u00f3 (e.g. con el firefox abierto, el OpenOffice con un documento&#8230;).<\/p>\n<p><i><a href=\"http:\/\/www.squirrel.nl\/people\/jvromans\/articles\/TM4001WLMi\/index.html\">* Web con informaci\u00f3n extra sobre Acer Travelmate 4001 WLMI<\/a><\/i><\/p>\n<p><b>Actualizaci\u00f3n I<\/b> Nuevo m\u00e9todo para <a href=\"http:\/\/www.marblestation.com\/blog\/?p=401\">Smart batteries en Ubuntu<\/a> m\u00e1s sencillo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>He pasado unas cuantas horas trasteando con el kernel en Ubuntu, queria activar un par de cosas: Soporte para Smart Battery: como ya he comentado en otras ocasiones, el soporte para smart batteries (la que tiene mi port\u00e1til) se esta desarrollando en estos momentos pero ya existen parches usables. Me molesta no poder saber el &hellip; <a href=\"https:\/\/www.marblestation.com\/?p=332\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Compilar kernel en Ubuntu con soporte Smart Battery y Software Suspend 2<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-332","post","type-post","status-publish","format-standard","hentry","category-espanyol","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/332","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=332"}],"version-history":[{"count":1,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/332\/revisions"}],"predecessor-version":[{"id":1585,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/332\/revisions\/1585"}],"wp:attachment":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}