1 Syslinux LUA User Guide 2 ======================= 3 Marcel Ritter <Marcel.Ritter (a] rrze.uni-erlangen.de> 4 5 Invocation 6 ---------- 7 8 Running +lua.c32+ only results in an interactive shell. 9 ...................................................... 10 KERNEL lua.c32 11 ...................................................... 12 13 By using the +APPEND+ parameter you can specify a lua 14 script to be executed: 15 ...................................................... 16 KERNEL lua.c32 17 APPEND /testit.lua 18 ...................................................... 19 20 Modules 21 ------- 22 23 Modules must be explicitly loaded into the namespace 24 before use, for example: 25 ...................................................... 26 syslinux = require ("syslinux") 27 ...................................................... 28 29 SYSLINUX 30 ~~~~~~~~ 31 32 .syslinux.version() 33 34 Returns version string 35 36 .syslinux.derivative() 37 38 Returns running Syslinux's derivative (ISOLINUX, PXELINUX or SYSLINUX). 39 See com32/lua/test/syslinux-derivative.lua for an example. 40 41 .syslinux.sleep(s) 42 43 Sleep for +s+ seconds 44 45 .syslinux.msleep(ms) 46 47 Sleep for +ms+ milliseconds 48 49 .run_command(command) 50 51 Execute syslinux command line +command+. 52 53 _Example_: 54 ...................................................... 55 syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw") 56 ...................................................... 57 58 .run_default() 59 60 FIXME 61 62 .local_boot() 63 64 FIXME 65 66 .final_cleanup() 67 68 FIXME 69 70 .boot_linux(kernel, cmdline, [mem_limit], [videomode]) 71 72 FIXME 73 74 .run_kernel_image(kernel, cmdline, ipappend_flags, type) 75 76 FIXME 77 78 .loadfile(filname) 79 80 Load file +filename+ (via TFTP) 81 82 .filesize(file) 83 84 Return size of +file+ (loaded by loadfile()) 85 86 .filename(file) 87 88 Return name of +file+ (loaded by loadfile()) 89 90 .in itramfs_init() 91 92 Return empty initramfs object 93 94 .initramfs_load_archive(initramfs, filename) 95 96 Load contents of +filename+ into +initramfs+. Initialize 97 +initramfs+ with initramfs_init() before use. 98 99 .initramfs_add_file(initramfs, file) 100 101 Adds +file+ to +initramfs+. +initramfs+ needs to be 102 initialized, +file+ has been loaded by loadfile(). 103 104 _Example_: 105 ...................................................... 106 -- get nice output 107 printf = function(s,...) 108 return io.write(s:format(...)) 109 end -- function 110 111 kernel = syslinux.loadfile("/SuSE-11.1/x86_64/linux") 112 113 printf("Filename/size: %s %d\n", syslinux.filename(kernel), syslinux.filesize(kernel)) 114 115 initrd = syslinux.loadfile("/SuSE-11.1/x86_64/initrd") 116 117 printf("Filename/size: %s %d\n", syslinux.filename(initrd), syslinux.filesize(initrd)) 118 119 initrd = syslinux.initramfs_init() 120 syslinux.initramfs_load_archive(initrd, "/SuSE-11.1/x86_64/initrd"); 121 122 syslinux.boot_it(kernel, initrd, "init=/bin/bash") 123 124 syslinux.sleep(20) 125 126 ...................................................... 127 128 129 130 DMI 131 ~~~ 132 133 .dmi_supported() 134 135 Returns +true+ if DMI is supported on machine, +false+ otherwise. 136 137 .dmi_gettable() 138 139 Returns a list if key-value pairs. The key is one of the DMI property strings: 140 FIXME list 141 142 _Example_: 143 ...................................................... 144 if (dmi.supported()) then 145 146 dmitable = dmi.gettable() 147 148 for k,v in pairs(dmitable) do 149 print(k, v) 150 end 151 152 print(dmitable["system.manufacturer"]) 153 print(dmitable["system.product_name"]) 154 print(dmitable["bios.bios_revision"]) 155 156 if ( string.match(dmitable["system.product_name"], "ESPRIMO P7935") ) then 157 print("Matches") 158 syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw") 159 else 160 print("Does not match") 161 syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw") 162 end 163 164 end 165 166 ...................................................... 167 168 169 PCI 170 ~~~ 171 172 .pci_getinfo() 173 174 Return list of value pairs (device_index, device) of all PCI devices. 175 176 .pci_getidlist(filename) 177 178 Load a tab separated list of PCI IDs and their description. 179 Sample files can be found here: http://pciids.sourceforge.net/ 180 181 182 _Example_: 183 ...................................................... 184 -- get nice output 185 printf = function(s,...) 186 return io.write(s:format(...)) 187 end 188 189 -- get device info 190 pciinfo = pci.getinfo() 191 192 -- get plain text device description 193 pciids = pci.getidlist("/pci.ids") 194 195 -- list all pci busses 196 for dind,device in pairs(pciinfo) do 197 198 -- search for device description 199 search = string.format("%04x%04x", device['vendor'], device['product']) 200 201 printf(" %04x:%04x:%04x:%04x = ", device['vendor'], device['product'], 202 device['sub_vendor'], device['sub_product']) 203 204 if ( pciids[search] ) then 205 printf("%s\n", pciids[search]) 206 else 207 printf("Unknown\n") 208 end 209 end 210 211 -- print(pciids["8086"]) 212 -- print(pciids["10543009"]) 213 -- print(pciids["00700003"]) 214 -- print(pciids["0070e817"]) 215 -- print(pciids["1002437a1002437a"]) 216 ...................................................... 217 218 219 VESA 220 ~~~~ 221 222 .getmodes() 223 224 Return list of available VESA modes. 225 226 _Example_: 227 ...................................................... 228 -- get nice output 229 printf = function(s,...) 230 return io.write(s:format(...)) 231 end 232 233 -- list available vesa modes 234 -- only one supported right now, not of much use 235 modes = vesa.getmodes() 236 237 for mind,mode in pairs(modes) do 238 printf("%04x: %dx%dx%d\n", mode['mode'], mode['hres'], mode['vres'], mode['bpp']) 239 end 240 ...................................................... 241 242 243 .setmode() 244 245 Set (only currently supported) VESA mode. 246 247 .load_background(filename) 248 249 Load +filename+ from TFTP, and use it as background image. 250 251 _Example_: 252 ...................................................... 253 -- get nice output 254 printf = function(s,...) 255 return io.write(s:format(...)) 256 end 257 258 -- lets go to graphics land 259 vesa.setmode() 260 261 printf("Hello World! - VESA mode") 262 263 -- some text to display "typing style" 264 textline=[[ 265 From syslinux GSOC 2009 home page: 266 267 Finish the Lua engine 268 269 We already have a Lua interpreter integrated with the Syslinux build. However, right now it is not very useful. We need to create a set of bindings to the Syslinux functionality, and have an array of documentation and examples so users can use them. 270 271 This is not a documentation project, but the documentation deliverable will be particularly important for this one, since the intended target is system administrators, not developers. 272 ]] 273 274 275 -- do display loop 276 -- keep in mind: background change will not erase text! 277 while ( true ) do 278 279 vesa.load_background("/background1.jpg") 280 281 syslinux.sleep(1) 282 283 for i = 1, #textline do 284 local c = textline:sub(i,i) 285 printf("%s", c) 286 syslinux.msleep(200) 287 end 288 289 syslinux.sleep(10) 290 291 ...................................................... 292 293